我试图理解前一个组成员编写的shell脚本。有这个for循环。我可以理解它在列表${!mylist[@]}
中循环,但我之前只看过${mylist[@]}
,而不是${!mylist[@]}
。
感叹号在这里做什么?
for i in ${!mylist[@]};
do
echo ${mylist[i]}
....
done
答案 0 :(得分:4)
${!mylist[@]}
将键(或 indices )返回到数组。这与${mylist[@]}
不同,$ arr=(abc def ghi)
返回数组中的值。
举个例子,让我们考虑一下这个数组:
$ echo "${!arr[@]}"
0 1 2
为了得到它的键(或者在这种情况下是 indices ):
$ echo "${arr[@]}"
abc def ghi
为了获得它的价值:
man bash
来自$ declare -A Arr=([a]=one [b]=two)
$ echo "${!Arr[@]}"
a b
$ echo "${Arr[@]}"
one two
:
也可以获得数组的键(索引) 作为价值观。 $ {!name [@]}和$ {!name [*]}扩展到索引 以数组变量名称分配。双引号时的处理 类似于@和*内的特殊参数的扩展 双引号。
表明同样适用于关联数组:
{{1}}