unset
bir öğeyi kaldırır. Kalan öğeleri yeniden numaralandırmaz.
declare -p
Tam 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")
numbers
Artı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 a
bu 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
numbers
Eksik öğ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 4
ve 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, 4
endeksler listesinde eksik.
belgeleme
Gönderen man bash
:
unset
Yerleş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
, name
bir dizinin unset name[subscript]
nerede subscript
olduğu *
veya nerede olduğunu ya da @
dizinin tamamını kaldırır.