小编典典

循环遍历数组,打印索引和值

all

我想做这样的事情:

foo=( )
foo[0]="bar"
foo[35]="baz"
for((i=0;i<${#foo[@]};i++))
do
    echo "$i: ${foo[$i]}"
done
# Output:
# 0: bar
# 1:

然后我尝试使用 for in 循环遍历它:

foo=( )
foo[0]="bar"
foo[35]="baz"
for i in ${foo[@]}
do
    echo "?: $i"
done
# Output:
# ?: bar
# ?: naz

但在这里我不知道索引值。

我知道你可以像

foo=( )
foo[0]="bar"
foo[35]="baz"
declare -p foo
# Output:
# declare -a foo='([0]="bar" [35]="baz")'

但是,你不能用另一种方式来做吗?


阅读 60

收藏
2022-05-25

共1个答案

小编典典

"${!foo[@]}"你会发现带有(
reference )的数组键,所以:

for i in "${!foo[@]}"; do 
  printf "%s\t%s\n" "$i" "${foo[$i]}"
done

这意味着索引将在其中,$i而元素本身必须通过${foo[$i]}

2022-05-25