PHPの$array[] = 'foo';
のような何かをbashでやる方法はありますか:
array[0] = 'foo'
array[1] = 'bar'
はいあります:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
代入文がシェル変数または配列インデックスに値を代入している状況では(配列を参照)、 '+ ='演算子を使用して変数の前の値に追加または追加することができます。
Dumb Guy が指摘するように、配列がゼロから始まりシーケンシャルであるかどうかに注意することが重要です。連続していないインデックスに代入したり設定解除したりできるので、${#array[@]}
は常に配列の末尾の次の項目とは限りません。
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
最後のインデックスを取得する方法は次のとおりです。
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
これは、配列の最後の要素を取得する方法を示しています。あなたはこれをよく見るでしょう:
$ echo ${array[${#array[@]} - 1]}
g
ご覧のとおり、スパース配列を扱っているので、これは最後の要素ではありません。ただし、これはスパース配列と連続配列の両方で機能します。
$ echo ${array[@]: -1}
i
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
配列が常にシーケンシャルで0から始まる場合は、次のようにします。
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
誤って等号の間にスペースを入れた場合
array[${#array[@]}] = 'foo'
その後、次のようなエラーが表示されます。
array_name[3]: command not found
インデックス付き配列では、次のようにすることができます。
declare -a a=()
a+=('foo' 'bar')