Gibt es eine Möglichkeit, so etwas wie PHPs $array[] = 'foo';
in Bash oder Doing zu machen:
array[0]='foo'
array[1]='bar'
Gibt es eine Möglichkeit, so etwas wie PHPs $array[] = 'foo';
in Bash oder Doing zu machen:
array[0]='foo'
array[1]='bar'
Antworten:
Ja da ist:
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
In dem Kontext, in dem eine Zuweisungsanweisung einer Shell-Variablen oder einem Array-Index einen Wert zuweist (siehe Arrays), kann der Operator '+ =' verwendet werden, um den vorherigen Wert der Variablen anzuhängen oder zu ergänzen.
ARRAY
nur ein Platzhalter für einen tatsächlichen Variablennamen ist. Selbst wenn Ihre Array-Indizes nicht sequentiell sind, wird das Anhängen mit +=
einfach dem höchsten Index + 1
${myarray[@]}
Wenn Sie auf eine Array-Variable verweisen, als wäre sie ein Skalar, entspricht dies dem Zugriff auf das Element 0. mit anderen Worten: $myarray
ist das gleiche wie ${myarray[0]}
.
Wie Dumb Guy betont, ist es wichtig zu beachten, ob das Array bei Null beginnt und sequentiell ist. Da Sie nicht zusammenhängende Indizes zuweisen und nicht festlegen können, ${#array[@]}
ist dies nicht immer das nächste Element am Ende des Arrays.
$ 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
So erhalten Sie den letzten Index:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Das zeigt, wie man das letzte Element eines Arrays erhält. Sie werden dies oft sehen:
$ echo ${array[${#array[@]} - 1]}
g
Wie Sie sehen können, ist dies nicht das letzte Element, da es sich um ein spärliches Array handelt. Dies funktioniert jedoch sowohl bei spärlichen als auch bei zusammenhängenden Arrays:
$ echo ${array[@]: -1}
i
${array[@]: start[:count]}
Gibt die Anzahl der Elemente zurück. oder, falls nicht anders angegeben, alle verbleibenden Elemente. ab folgendem elem: - Wenn start> = 0: vom elem. dessen Index ist> = Start. - Wenn Start <0: vom Element. dessen Index ist (letzter Array-Index + 1) - abs (Start); CAVEAT: Wenn abs (start)> (letzter Array-Index + 1), wird eine Nullzeichenfolge zurückgegeben. Wenn count angegeben ist, werden so viele Elemente zurückgegeben, auch wenn ihre Indizes von Anfang an nicht zusammenhängend sind.
${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")
Sie diese
Wenn Ihr Array immer sequentiell ist und bei 0 beginnt, können Sie Folgendes tun:
array[${#array[@]}]='foo'
# gets the length of the array
${#array_name[@]}
Wenn Sie versehentlich Leerzeichen zwischen dem Gleichheitszeichen verwenden:
array[${#array[@]}] = 'foo'
Dann erhalten Sie eine ähnliche Fehlermeldung wie:
array_name[3]: command not found
+=
Syntax (siehe Antwort von @ e-t172) ist (a) einfacher und (b) funktioniert auch mit Arrays, die nicht zusammenhängend sind und / oder nicht mit 0 beginnen.
+=
hinzugefügt wurden, z. B. Version 2
$arr += ($el)
schien die Zeichenfolge durch Leerzeichen zu teilen und jedes der Elemente hinzuzufügen.
Mit einem indizierten Array können Sie Folgendes erreichen:
declare -a a=()
a+=('foo' 'bar')