回答:
はいあります:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
代入ステートメントがシェル変数または配列インデックス(配列を参照)に値を代入しているコンテキストでは、「+ =」演算子を使用して、変数の以前の値に追加または追加できます。
ARRAY
は実際の変数名のプレースホルダーにすぎないことに注意してください。あなたの配列のインデックスがある場合でもないシーケンシャル、と追加すると+=
、単純に最高のインデックス+ 1に割り当てる
${myarray[@]}
スカラーのように配列変数を参照することは、要素0にアクセスすることと同じです。つまり$myarray
、と同じ${myarray[0]}
です。
ダムGuyは指摘し、それは、配列は0から始まり、シーケンシャルであるかどうかに注意することが重要です。隣接していないインデックスに割り当てを行ったり、設定を解除したりできるので${#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
${array[@]: start[:count]}
count elemsを返します。または、指定されていない場合は、残りのすべての要素。次のelemから開始します。-start> = 0の場合:elemから。インデックスが> = startである。-start <0の場合:elemから。そのインデックスは(最後の配列インデックス+ 1)-abs(start); 警告:abs(start)>(last array index + 1)の場合、null文字列が返されます。countを指定すると、インデックスが最初から連続していない場合でも、同じ数の要素が返されます。
${array[-1]}
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
arr=("${arr[@]}" "new")
スペースのある要素がある場合に使用します
配列が常にシーケンシャルであり、0から始まる場合、これを行うことができます。
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
等号の間に誤ってスペースを使用した場合:
array[${#array[@]}] = 'foo'
次に、次のようなエラーが表示されます。
array_name[3]: command not found
+=
構文(E-T172の答え@参照)である()単純、および(b)には、非連続的である、および/または0で始まっていない配列で動作します
+=
に追加されたbashの以前のバージョンでも機能します(例:バージョン2
$arr += ($el)
文字列をスペースで分割し、各要素を追加するように見えました。