unset
menghapus elemen. Itu tidak memberi nomor baru pada elemen yang tersisa.
Kita dapat menggunakan declare -p
untuk 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 numbers
tidak 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 a
tidak memiliki elemen 2 hingga 21. Bash tidak mengharuskan indeks array berturut-turut.
Metode yang disarankan untuk memaksa nomor baru indeks
Mari kita mulai dengan numbers
array 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 4
dan 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 numbers
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")
Untuk melihat indeks mana yang ditugaskan:
$ echo "${!numbers[@]}"
0 1 2 3 5 6 7 8
Sekali lagi, 4
tidak ada dalam daftar indeks.
Dokumentasi
Dari man bash
:
The unset
builtin 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 name
adalah sebuah array, atau unset name[subscript]
, di mana subscript
adalah *
atau @
, menghapus seluruh array.