Bạn có thể làm điều này bằng cách sử dụng Danh sách các phím mảng . Từ bashtrang người đàn ông:
${!name[@]}
${!name[*]}
Danh sách các khóa mảng . Nếu tên là một biến mảng, mở rộng ra danh sách các chỉ số mảng (khóa) được gán trong tên. Nếu tên không phải là một mảng, mở rộng thành 0nếu tên được đặt và null khác. Khi @được sử dụng và mở rộng xuất hiện trong dấu ngoặc kép, mỗi khóa sẽ mở rộng thành một từ riêng biệt.
Ví dụ của bạn:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
Kết quả này trong:
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
Lưu ý rằng điều này cũng hoạt động cho các chỉ mục không liên tiếp:
#!/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
Kết quả này trong:
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
"${array[*]}"thay vì"${array[@]}". Sử dụng*thay vì@nhiều hơn hoặc ít hơn coi nó như một chuỗi thay vì một mảng.