什么了!表达式中的含义:$ {!mylist [@]}

时间:2016-07-28 04:55:55

标签: shell for-loop

我试图理解前一个组成员编写的shell脚本。有这个for循环。我可以理解它在列表${!mylist[@]}中循环,但我之前只看过${mylist[@]},而不是${!mylist[@]}

感叹号在这里做什么?

for i in ${!mylist[@]};
do
        echo ${mylist[i]}
        ....
done

1 个答案:

答案 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}}