Anda dapat melakukan ini menggunakan Daftar kunci array . Dari bash
halaman manual:
${!name[@]}
${!name[*]}
Daftar kunci array . Jika nama adalah variabel array, perluas daftar indeks array (kunci) yang ditetapkan dalam nama. Jika nama bukan array, perluas 0
jika nama diatur dan null sebaliknya. Ketika @
digunakan dan ekspansi muncul dalam tanda kutip ganda, setiap kunci diperluas ke kata yang terpisah.
Sebagai contoh Anda:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Ini menghasilkan:
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
Perhatikan bahwa ini juga berfungsi untuk indeks yang tidak berurutan:
#!/bin/bash
AR=([3]='foo' [5]='bar' [25]='baz' [7]='bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Ini menghasilkan:
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
"${array[*]}"
bukan"${array[@]}"
. Menggunakan*
alih-alih@
kurang lebih memperlakukannya sebagai string, bukan array.