Eine Sache, die zu beachten ist, ist, dass bashimplementierte Arrays wie kshassoziative Arrays, bei denen Schlüssel auf positive ganze Zahlen beschränkt sind (im Gegensatz zu anderen Sprachen wie perloder zshzum Beispiel).
Im:
a[123]=foo a[456]=bar a[789]=baz
In bash haben Sie ein assoziatives Array mit 3 Elementen, während Sie in bash perlein Array mit 790 Elementen haben (789 mit zsh).
In kshoder bash, ${a[@]:0:1}gibt das erste Element des Feldes in der Liste von Elementen sortierte numerisch durch Schlüssel , wo der Schlüssel ist größer oder gleich 0 , so dass in diesem Fall, gibt sie ${a[123]}nicht ${a[0]}.
unset 'a[123]'
(Denken Sie daran, es zu zitieren, da es sonst fehlschlagen würde, wenn sich im aktuellen Verzeichnis eine Datei mit den Namen a1 oder a2 oder a3 befindet.) Dies ist sinnvoll, da ein bestimmter Schlüssel im Array entfernt wird.
unset 'a[@]::2'
macht aber weniger Sinn. bashnur versteht unset a, unset 'a[123]'oder unset 'a[*/@]', etwas nach ignoriert wird, so unset 'a[@]::2'und unset 'a[@]please'das gleiche tun: unset das gesamte Array.
Wenn Sie einen Tastenbereich deaktivieren möchten, müssen Sie die Tasten durchlaufen:
Um die Liste der Schlüssel des Arrays zu erhalten, lautet die Syntax "${!a[@]}". Leider funktioniert das Anwenden eines Bereichs nicht mit bashnoch ksh, sodass Sie ein temporäres Array benötigen:
keys=("${!a[@]}")
for i in "${keys[@]::2}"; do unset "a[$i]"; done
Wenn Sie diese Arrays nun wie in anderen Sprachen betrachten möchten, möchten Sie sie nicht verwenden unset. Wenn das Array an erster Stelle nicht dünn ist und Sie es beibehalten möchten (dh alle Elemente um 2 verschieben, anstatt die ersten beiden zu deaktivieren), können Sie Folgendes tun:
a=("${a[@]:2}")
Das heißt, Sie ordnen das Array mit der Liste der Elemente neu zu, die Sie behalten möchten.
Zum Vergleich mit zsh.
a=({1..20})
unset 'a[12,16]'
würde einen leeren Wert auf die Elemente 12 bis 16 setzen, während unset 'a[16,20]'das Array auf 15 Elemente verkleinert würde.
a=({1..20})
a[12,16]=()
(noch mit zsh) würde die Elemente 17 bis 20 um 5 Positionen verschieben, also a[12]enthalten 17.