我对 declare -A
在这里的作用感到困惑,有人可以解释一下吗?
declare -A deploy
roles="test1 test2 test3 test4"
for role in $roles; do
deploy[$role]=${!role}
done
关于${!role}
的更多困惑>
最佳答案
declare -A
定义一个关联数组,它可以将一个字符串映射到另一个字符串。
例如:
pax> declare -A mymap
pax> mymap[washington]=george
pax> mymap[lincoln]=abe
pax> echo ${!mymap[*]}
washington lincoln
pax> echo ${mymap[no_such_key]}
pax> echo ${mymap[washington]}
george
pax> echo ${mymap[lincoln]}
abe
就${!role}
位而言,这是间接展开。通常情况下,一个变量会有一层扩展,如下所示:
pax> plugh=xyzzy
pax> xyzzy=zorkmid
pax> echo ${plugh}
xyzzy
但是,您也可以将名称的扩展视为随后扩展的另一个变量:
pax> echo ${!plugh}
zorkmid
发生的事情是 plugh
扩展为 xyzzy
,然后它本身再次扩展为 zorkmid
。
在您的特定情况下,例如,变量 role
设置为 test1
,以下行是等效的:
deploy[$role]=${!role}
deploy[test1]=${test1}
关于linux - declare -A 在 Linux shell 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41234147/