unsetbir öğeyi kaldırır. Kalan öğeleri yeniden numaralandırmaz.
declare -pTam olarak ne olacağını görmek için kullanabiliriz 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")
numbersArtık bir elemanın olmadığını gözlemleyin 4.
Başka bir örnek
Gözlemek:
$ a=()
$ a[1]="element 1"
$ a[22]="element 22"
$ declare -p a
declare -a a=([1]="element 1" [22]="element 22")
Dizi abu dizi indeksleri birbirini takip gerektirmez 21. Bash boyunca herhangi bir öğe 2 yer alır.
Endekslerin yeniden numaralandırılmasını zorlamak için önerilen yöntem
numbersEksik öğe içeren dizi ile başlayalım 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Endekslerin değişmesini istiyorsak, o zaman:
$ numbers=("${numbers[@]}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
Şimdi bir eleman numarası var 4ve değeri var 69.
Bir öğeyi ve yeniden numaralandırma dizisini tek adımda kaldırmak için alternatif yöntem
Tekrar tanımlayalım numbers:
$ numbers=(53 8 12 9 784 69 8 7 1)
Yorumlarda Toby Speight tarafından önerildiği gibi , dördüncü elemanı kaldırmak ve geri kalan elemanları tek adımda yeniden numaralandırmak için bir yöntem:
$ 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")
Gördüğünüz gibi, dördüncü eleman kaldırıldı ve kalan tüm elemanlar yeniden numaralandırıldı.
${numbers[@]:0:4}dilimleri dizisi numbers: 0 öğesinden başlayarak ilk dört öğeyi alır.
Benzer şekilde, ${numbers[@]:5}dilim dizisi numbers: 5. öğeden başlayıp dizinin sonuna kadar devam eden tüm öğeleri alır.
Bir dizinin indekslerini alma
Değerler bir dizi ile elde edilebilir ${a[@]}. Bu değerlere karşılık gelen dizinleri (veya anahtarları ) bulmak için tuşunu kullanın ${!a[@]}.
Örneğin numbers, eksik öğeye sahip dizimizi tekrar düşünün 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Hangi indekslerin atandığını görmek için:
$ echo "${!numbers[@]}"
0 1 2 3 5 6 7 8
Yine, 4endeksler listesinde eksik.
belgeleme
Gönderen man bash:
unsetYerleşik Dizileri kaldırmak için kullanılır. unset name[subscript]dizideki dizi öğesini yok eder subscript. İndekslenmiş dizilere negatif abonelikler, yukarıda açıklandığı gibi yorumlanır. Yol adı genişlemesinin neden olduğu istenmeyen yan etkilerden kaçınmak için özen gösterilmelidir. unset name, namebir dizinin unset name[subscript]nerede subscriptolduğu * veya nerede olduğunu ya da @dizinin tamamını kaldırır.