配列の要素を削除する方法
若干ハマったのでメモ。
bash で配列を使うにはこんな感じ。
declare -a aaa aaa=('foo' 'bar' 'baz') echo -n "# ${#aaa[@]} : " declare -p aaa ↓ # 3 : declare -a aaa='([0]="foo" [1]="bar" [2]="baz")'
ほんで、bashで配列の要素を削除するにはunsetすればいい。
unset name[subscript] destroys the array element at index subscript.
http://www.linuxcommand.org/man_pages/bash1.html
でやってみると…
unset aaa[1] echo -n "# ${#aaa[@]} : " declare -p aaa ↓ # 2 : declare -a aaa='([0]="foo" [2]="baz")'
要素は無くなる([1]="bar"が無くなり、要素数も3から2になった)けど、インデックスは詰めてくれない([1]が欠番になってる)。
なので、こんなループがあると
i=0 while [ $i -lt ${#aaa[@]} ]; do echo "[$i]${aaa[$i]} " i=$(($i+1)) done ↓ [0]foo [1]
[2]のbazが表示されないので注意。
インデックスを詰めるには代入し直せばOK。なんかイモいけど。
unset aaa[1] aaa=(${aaa[@]}) echo -n "# ${#aaa[@]} : " declare -p aaa ↓ # 2 : declare -a aaa='([0]="foo" [1]="baz")'