Answers:
您可以使用数组键列表执行此操作。从bash
手册页:
${!name[@]}
${!name[*]}
数组键列表。如果name是数组变量,则扩展到name中分配的数组索引(键)列表。如果name不是数组,则扩展到
0
name设置为,否则为null。当@
使用和膨胀出现双引号,每个键膨胀到一个单独的字内。
例如:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
结果是:
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
请注意,这对于非成功索引也适用:
#!/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
结果是:
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
printf "$i=(${AR[i]})\n"
或echo "$i=(${ARi]})"
两者都通过显示如何获取key和var来提供一些额外的信息,但严格来说,它echo "$i"
会回答OP。其余的是“ bash fu” :)
您可以执行以下操作:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
length=${#AR[@]}
for (( i = 0; i < length; i++ )); do
echo "$i"
done
输出:
0
1
2
3
"${array[*]}"
来代替"${array[@]}"
。使用*
而不是@
或多或少将其视为字符串而不是数组。