是做什么的!在数组中做?

是做什么的!在数组中做?

我试图打印索引号以及数组的值。我不知道该怎么做,并通过其他人过去在该网站上的帖子弄清楚了。他们基本上添加了一个!在“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

相关内容