Mam tablicę zawierającą niektóre elementy, ale chcę wypchnąć nowe elementy na początek tablicy; W jaki sposób mogę to zrobić?
bash
shell-script
array
Gaurav KS
źródło
źródło
ARRAY+=('foo')
Odpowiedzi:
Aby dodać element na początku tablicy, użyj.
Zasadniczo zrobiłbyś.
Aby dodać element na końcu tablicy, użyj.
Lub zamiast tego
Zasadniczo zrobiłbyś.
Aby dodać element do określonego indeksu tablicy, użyj.
Powiedzmy, że chcemy dodać element do pozycji Index2 arr [2] , w rzeczywistości dokonalibyśmy scalenia na poniższych pod-tablicach:
Pobierz wszystkie elementy z indeksem position2 do ostatniego arr [2] , arr [3] , ....
Usuwanie elementu z tablicy
Oprócz usunięcia elementu z tablicy (powiedzmy element nr 2) musimy połączyć dwie pod-tablice. Pierwsza podtablica będzie przechowywać elementy przed elementem # 2, a druga pod-tablica będzie zawierać elementy po elemencie # 2.
${arr[@]:0:2}
otrzyma dwa elementy arr [0] i arr [1] zaczyna się od początku tablicy.${arr[@]:3}
pobierze wszystkie elementy od indeksu 3 arr [3] do ostatniego.Inną możliwością usunięcia elementu jest
Używanie
unset
(faktycznie przypisanie wartości „null” do elementu)Użyj zastępuj wzór, jeśli znasz wartość swoich elementów.
źródło
arr+=(element)
iunset arr[2]
(które powinno byćunset -v 'arr[2]'
!), Które zakłada tablice nieliczne. Zauważ też, żearr=( "${arr[@]/PATTERN/}" )
nie zmienia to liczby elementów. Wszystko, co może zrobić, to zastąpić je pustym ciągiem.Zauważ, że tablice w
bash
(skopiowane z ksh) są raczej tablicami asocjacyjnymi.utworzy nową
$a
tablicę znewvalue
as${a[0]}
i elementy oryginalnej tablicy dołączone w kolejności numerycznej ich klawiszy za pomocą klawiszy 1, 2 ...Na przykład, jeśli miałeś:
To wyjaśnia, dlaczego nie ma do tego wbudowanego operatora.
Jeśli chcesz wstawić
newvalue
as${a[0]}
i przesunąć wszystkie pozostałe klucze o jeden, potrzebujesz tymczasowej tablicy:Powłoki podobne
zsh
lubyash
posiadające normalne tablice mają do tego operatory:zsh
:(działa również w przypadku przygotowywania ciągów do zmiennych skalarnych)
yash
:źródło
źródło