it-swarm.com.de

Fügen Sie einem Array ein neues Element hinzu, ohne den Index in Bash anzugeben

Gibt es eine Möglichkeit, etwas wie PHPs $array[] = 'foo'; in Bash vs Doing zu machen:

array[0] = 'foo'
array[1] = 'bar'
706
Darryl Hein

Ja da ist:

ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')

Bash Reference Manual :

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 an den vorherigen Wert der Variablen anzuhängen oder diesen zu ergänzen.

1375

Wie Dumb Guy hervorhebt, ist es wichtig zu beachten, ob das Array bei Null beginnt und sequentiell ist. Da Sie nicht zusammenhängende Indizes zuweisen und löschen können, ist ${#array[@]} 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, ist dies nicht das letzte Element, da es sich um ein spärliches Array handelt. Dies funktioniert jedoch sowohl auf spärlichen als auch auf zusammenhängenden Arrays:

$ echo ${array[@]: -1}
i
71
$ declare -a arr
$ arr=("a")
$ arr=("${arr[@]}" "new")
$ echo ${arr[@]}
a new
$ arr=("${arr[@]}" "newest")
$ echo ${arr[@]}
a new newest
48
ghostdog74

Wenn Ihr Array immer sequentiell ist und bei 0 beginnt, können Sie dies 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 Fehlermeldung ähnlich der folgenden:

array_name[3]: command not found
24
Dumb Guy

Mit einem indizierten Array können Sie folgendermaßen vorgehen:

declare -a a=()
a+=('foo' 'bar')
5
Grégory Roche