我试图打印索引号以及数组的值。我不知道该怎么做,并通过其他人过去在该网站上的帖子弄清楚了。他们基本上添加了一个!在“for”语句中。但我其实不明白“!”是什么意思。实际上是在做,请有人告诉我,这样我就可以理解为什么这有效(即打印出 $i 的索引而不是值)?
$ cat test6
declare -a car_models
car_models=( honda toyota bmw )
for i in "${!car_models[@]}" ## Meaning of ! in this line plz
do
echo " $i ${car_models[$i]}"
done
$ ./test6
0 honda
1 toyota
2 bmw
答案1
"${!car_models[@]}"
从字面上看给出了数组的索引car_models
。
来自手册:
可以获得数组的键(索引)以及值。
${!name[@]}
并${!name[*]}
扩展到数组变量名称中分配的索引。双引号中的处理类似于特殊参数@
和*
双引号中的扩展。
它适用于索引数组和关联数组:
$ bash -c 'a=([10]=foo bar doo); echo "${!a[@]}"'
10 11 12
$ bash -c 'declare -A aa=([foo]=123 [bar]=456); echo "${!aa[@]}"'
bar foo