unsetusuwa element. Nie przenumerowuje pozostałych elementów.
Możemy użyć, declare -paby zobaczyć dokładnie, co się dzieje z numbers:
$ unset "numbers[i]"
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Zauważ, że numbersnie ma już elementu 4.
Inny przykład
Przestrzegać:
$ a=()
$ a[1]="element 1"
$ a[22]="element 22"
$ declare -p a
declare -a a=([1]="element 1" [22]="element 22")
Tablica anie ma elementów od 2 do 21. Bash nie wymaga, aby indeksy tablic były następujące po sobie.
Sugerowana metoda wymuszenia numeracji indeksów
Zacznijmy od numberstablicy z brakującym elementem 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Jeśli chcielibyśmy zmienić wskaźniki, to:
$ numbers=("${numbers[@]}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
Jest teraz numer elementu 4i ma on wartość 69.
Alternatywna metoda usuwania elementu i zmiany numeracji tablicy w jednym kroku
Ponownie zdefiniujmy numbers:
$ numbers=(53 8 12 9 784 69 8 7 1)
Jak zasugerował Toby Speight w komentarzach, metoda usunięcia czwartego elementu i zmiany numeracji pozostałych elementów w jednym kroku:
$ numbers=("${numbers[@]:0:4}" "${numbers[@]:5}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
Jak widać, czwarty element został usunięty, a wszystkie pozostałe elementy zostały ponumerowane.
${numbers[@]:0:4}tablica plasterków numbers: pobiera pierwsze cztery elementy, zaczynając od elementu 0.
Podobnie, ${numbers[@]:5}pokrój tablicę numbers: bierze wszystkie elementy, zaczynając od elementu 5 i kontynuując do końca tablicy.
Uzyskiwanie wskaźników tablicy
Te wartości tablicy można uzyskać ${a[@]}. Aby znaleźć indeksy (lub klucze ) odpowiadające tym wartościom, użyj ${!a[@]}.
Na przykład rozważmy jeszcze raz naszą tablicę numbersz brakującym elementem 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Aby zobaczyć, które indeksy są przypisane:
$ echo "${!numbers[@]}"
0 1 2 3 5 6 7 8
Znowu 4brakuje jej na liście indeksów.
Dokumentacja
Od man bash:
unsetWbudowane służy do niszczenia tablic. unset name[subscript]niszczy element tablicy o indeksie subscript. Ujemne indeksy dolne do indeksowanych tablic są interpretowane jak opisano powyżej. Należy zachować ostrożność, aby uniknąć niepożądanych efektów ubocznych spowodowanych rozszerzaniem nazwy ścieżki. unset name, gdzie namejest tablica lub unset name[subscript], gdzie subscriptjest * lub @, usuwa całą tablicę.