循环访问数组,同时打印索引和值

我想要做这样的事情:

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

然后我试着循环使用它在:

 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")' 

但是,你不能以另一种方式做到吗?

你会find数组键"${!foo[@]}" ( 引用 ),所以:

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

你总是可以使用迭代参数:

  ITER=0 for I in ${FOO[@]} do echo ${I} ${ITER} ITER=$(expr $ITER + 1) done 
 INDEX=0 for i in $list; do echo ${INDEX}_$i let INDEX=${INDEX}+1 done