unsetmenghapus elemen. Itu tidak memberi nomor baru pada elemen yang tersisa.
Kita dapat menggunakan declare -puntuk melihat apa yang terjadi pada 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")
Amati numberstidak lagi memiliki elemen 4.
Contoh lain
Mengamati:
$ a=()
$ a[1]="element 1"
$ a[22]="element 22"
$ declare -p a
declare -a a=([1]="element 1" [22]="element 22")
Array atidak memiliki elemen 2 hingga 21. Bash tidak mengharuskan indeks array berturut-turut.
Metode yang disarankan untuk memaksa nomor baru indeks
Mari kita mulai dengan numbersarray dengan elemen yang hilang 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Jika kami ingin indeks berubah, maka:
$ numbers=("${numbers[@]}")
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [4]="69" [5]="8" [6]="7" [7]="1")
Sekarang ada nomor elemen 4dan memiliki nilai 69.
Metode alternatif untuk menghapus elemen & nomor baru dalam satu langkah
Sekali lagi, mari kita definisikan numbers:
$ numbers=(53 8 12 9 784 69 8 7 1)
Seperti yang disarankan oleh Toby Speight dalam komentar, metode untuk menghapus elemen keempat dan memberi nomor baru pada elemen yang tersisa semuanya dalam satu langkah:
$ 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")
Seperti yang Anda lihat, elemen keempat telah dihapus dan semua elemen yang tersisa diberi nomor baru.
${numbers[@]:0:4}slices array numbers: dibutuhkan empat elemen pertama dimulai dengan elemen 0.
Demikian pula, ${numbers[@]:5}slice array numbers: dibutuhkan semua elemen dimulai dengan elemen 5 dan berlanjut ke akhir array.
Memperoleh indeks array
Nilai - nilai array dapat diperoleh dengan ${a[@]}. Untuk menemukan indeks (atau kunci ) yang sesuai dengan nilai-nilai itu, gunakan ${!a[@]}.
Misalnya, pertimbangkan lagi array kami numbersdengan elemen yang hilang 4:
$ declare -p numbers
declare -a numbers=([0]="53" [1]="8" [2]="12" [3]="9" [5]="69" [6]="8" [7]="7" [8]="1")
Untuk melihat indeks mana yang ditugaskan:
$ echo "${!numbers[@]}"
0 1 2 3 5 6 7 8
Sekali lagi, 4tidak ada dalam daftar indeks.
Dokumentasi
Dari man bash:
The unsetbuiltin digunakan untuk menghancurkan array. unset name[subscript]menghancurkan elemen array pada indeks subscript. Subskrip negatif untuk array yang diindeks ditafsirkan seperti yang dijelaskan di atas. Perawatan harus diambil untuk menghindari efek samping yang tidak diinginkan yang disebabkan oleh ekspansi pathname. unset name, di mana nameadalah sebuah array, atau unset name[subscript], di mana subscriptadalah * atau @, menghapus seluruh array.