从 bash shell 脚本循环访问数组索引变量?

从 bash shell 脚本循环访问数组索引变量?

我想在 bash shell 脚本中循环遍历数组时访问数组索引变量。

myscript.sh
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
  echo $i
done

上述脚本的结果是:

foo
bar
baz
bat

我寻求的结果是:

0
1
2
3

我如何改变我的脚本来实现这一目标?

答案1

您可以使用以下方法执行此操作数组键列表。从bash手册页:

${!name[@]}
${!name[*]}

数组键列表。如果 name 是数组变量,则扩展到 name 中分配的数组索引(键)列表。如果 name 不是数组,0如果设置了 name,则扩展为 null,否则扩展为 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

答案2

除了乔丹的答案之外,您还可以C在以下位置执行类似的循环bash

for ((idx=0; idx<${#array[@]}; ++idx)); do
    echo "$idx" "${array[idx]}"
done

答案3

同时显示索引和值(这个脚本对我有用)

ARRAY=( "engineer " "CEO" "doctor" "teacher" )

for i in "${!ARRAY[@]}"
do
      echo " index---------------content"
      echo " $i                  ${ARRAY[$i]}"
done

答案4

你可以这样做:

#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
length=${#AR[@]}
for (( i = 0; i < length; i++ )); do
  echo "$i"
done

输出:

0
1
2
3

相关内容