unset array[0]
usuwa element, ale mimo to echo ${array[0]}
otrzymuję wartość null, są też inne sposoby, ale jeśli element tablicy zawiera spacje takie jak poniżej
array[0]='james young'
array[1]='mary'
array[2]='randy orton'
ale one również nie wykonują zadania
array=${array[@]:1} #removed the 1st element
teraz chcę, żeby nowa tablica była jak
array[0]='mary'
array[1]='randy orton'
Spacje powodują problemy po przypisaniu, a rzeczywista tablica staje się jak z podstawieniem.
array=(mary randy orton)
bash
shell
shell-script
array
Munish
źródło
źródło
Odpowiedzi:
Wystarczy użyć składni tablicowej dla zadania i podać swoją zmienną:
Edytuj zgodnie z pytaniem w komentarzu. Dla
$@
można go używać tak:źródło
zsh
których tablice nie są rzadkie, w przeciwieństwie do ksh lub bash.shift
?array=("${array[@]: -3}")
iset -- "${@: -3}"
. Tak utknąłem na indeksach.shift $[$#-3]
dla ostatnich 3 jest prawdopodobnie znacznie szybszy dla$@
To mnie zastanowiło. Problem z sed / awk / tail polega na tym, że są one linia po linii. Po usunięciu pierwszego wiersza musisz zapisać co drugi wiersz ze przestrzeni wzorów do pliku.
Usuń pierwszy wiersz, gdy zrzuca go z powrotem do pliku.
Po prostu zmień
largefile
nazwę pliku.źródło
sed -i 1d largefile
zamiast tego? Działa to nawet w przypadku plików większych niż RAM + swapAby usunąć element z określonego indeksu, możemy użyć,
unset
a następnie skopiować do innej tablicy. Tylkounset
w tym przypadku nie jest wymagane. Ponieważunset
nie usuwa elementu, ustawia po prostu łańcuch zerowy na konkretny indeks w tablicy.Dane wyjściowe to
źródło
źródło