Top/article/Mimicking-2D-array-in-bash
English | Japanese
English | Japanese

Menu

  • Top
  • Akihiko Yamaguchi 山口 明彦
  • Project プロジェクト
  • Text テキスト
  • Recent articles 最近の記事
  • Articles 記事一覧 (a to z)
  • Search 検索

Tags タグ †

  • [c++][bash][python][latex][php]
  • [linux][windows][mac][android]
  • [math][algorithm][idea][trick]
  • [liboctave][opencv][git][ros]
  • [setting][bug][general]
↑

Recent articles 最近の記事 †

2019-07-02
  • article/Display-Unix-Time
  • article/Synchronize-Linux-Time-to-Remote
2018-09-27
  • article/python-multimode-singleton
2018-09-02
  • article/rosinstall-git-default-remote
2017-07-28
  • article/SubMenu
2017-03-05
  • article/Import-a-different-version-of-OpenCV-in-Python
2015-08-17
  • article/DRC-finals-2015
2015-01-05
  • article/Upgrade-Android-to-Lollipop
2015-01-01
  • article/Kernel-panic-of-Linux-when-using-Xtion
  • article/Do-not-skip-freeing-data-when-using-tri-mesh-in-ODE
Access: 2/2186 - Admin
These search terms have been highlighted:[bash]

Mimicking 2D array in bash

bashで2次元配列モドキ

[bash][trick]
2008-11-05

bash で2次元配列を扱いたいときがまれにある.が, bash には1次元配列しか無いし,配列の要素に配列を代入することもできない.そこで疑似的に2次元配列を使う方法を考えてみた. 以下のようにする.

#!/bin/bash
array2() # name i j
{
  eval y='${'$1$2'['$3']}'
  echo $y
}

M0=(あ い う)
M1=(じゃ ば 馬)
M2=(ぱ ぷ ぺ)
M3[0]=hoge
M3[1]=he
M3[2]=xx
M3[3]=huge

i=1
j=2
echo $(array2 M $i $j) # M の ($i,$j)=(1,2) 要素にアクセスする

この array2 関数を定義しておくだけで, $i などのインデックス変数を使って配列の要素にアクセスできるようになる.

要するに,変数 Mi で i 行目のリストを保存しているわけだ.で, M に i をくっつけて無理矢理作った変数 Mi (1次元配列) から j 番目の要素を取り出すのが array2.つまり M1[2] のようなアクセスを, Mi[j] のように変数 (i,j) に対しても可能にしているというだけ.

おまけ †

#!/bin/bash
copy_array() # src dest
{
  eval $2='(${'$1'[@]})'
}
a=('orz..' 'm(-_-)m' '(´O`)b')
copy_array a b # a を b にコピー
echo ${b[2]}

これは1次元配列をコピーする関数.




Last-modified:2014-12-30 (Tue) 20:18:33 (3784d)
Site admin: Akihiko Yamaguchi.
Written by: Akihiko Yamaguchi.
System: PukiWiki 1.5.0. PHP 5.2.17. HTML conversion time: 0.008 sec.