Guides, HowTos and Tips for Technology Geeks - The Geek Stuff

高機能シェルのひとつにbashがある。shの機能を拡張したsh系に分類されるシェルで、インタラクティブシェルとしてもシェルスクリプトとしても利用される。Linux系のディストリビューションではデフォルトでインストールされ、デフォルトのシェルに設定されていることが多い。その場合、システムの/bin/shの実態がbashになっていることもあり、/bin/shスクリプトを書いているつもりでいつの間にかbashの拡張機能を使っていることもある。

The Ultimate Bash Array Tutorial with 15 Examples - The Geek Stuffにおいてbash拡張機能のひとつである配列の機能が紹介されている。15のサンプルにわけて機能を紹介する内容になっており、bash配列の機能を知るうえで参考になる。次に、特に代表的な使われ方をしている部分とその意味をまとめておく。

bash配列記述例 説明
Unix[0]='Debian' Unixという名前の配列の0番目にDebianという値を代入。配列は宣言しなくても使った瞬間に作成される。
Unix[1]='Red hat' Unix配列の1番目にRed hatという値を代入。
Unix[2]='Ubuntu' Unix配列の2番目にUbuntuという値を代入。
Unix[3]='Suse' Unix配列の3番目にSuseという値を代入。
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse') 上記4つをまとめて実行する記述方法。
echo ${Unix[1]} Unix配列の1番目を表示。
echo ${Unix[@]} Unix配列の内容をすべて表示。
echo ${#Unix[@]} Unix配列にいくつ要素があるかを表示。
echo ${#Unix[0]} Unix配列の0番目の内容の長さを表示。
echo ${#Unix[1]} Unix配列の1番目の内容の長さを表示。
echo ${#Unix[2]} Unix配列の2番目の内容の長さを表示。
echo ${#Unix[3]} Unix配列の3番目の内容の長さを表示。
echo ${#Unix} echo ${#Unix[0]}に同じ。
echo ${Unix[@]:3:2} Unix配列の3番目から2つの要素の内容を表示。
echo ${Unix[2]:0:4} Unix配列の2番目の内容の0番目から4つ分の内容を表示。
echo ${Unix[@]/Ubuntu/SCO Unix} Unix配列のすべての内容を対象にUbuntuという文字列をSCO Unixに変更して表示。
echo ${Unix[@]/Ubuntu/} Unix配列のすべての内容を対象にUbuntuという文字列を削除して表示。
Unix=("${Unix[@]}" "AIX" "HP-UX") Unix配列にさらに2つの要素を追加。
unset Unix[3] Unix配列の3番目の内容を空文字列にする。
Linux=("${Unix[@]}") Unix配列をLinux配列へ上書きコピー。
UnixShell=("${Unix[@]}" "${Shell[@]}") Unix配列とShell配列を結合してUnixShell配列を作成。
unset Unix Unix配列を削除。

同じ高性能シェルでも配列の扱いはまちまち。bashではインデックスは0からはじまっているが、zshでは1からはじまる。tcshでも配列は1番からはじまっている。