我对declare -A这里的内容感到困惑,有人可以解释一下吗?
declare -A deploy
roles="test1 test2 test3 test4"
for role in $roles; do
deploy[$role]=${!role}
done
Run Code Online (Sandbox Code Playgroud)
更迷惑 ${!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
Run Code Online (Sandbox Code Playgroud)
就位而言${!role},这是间接扩展。通常,变量将具有一级扩展,如下所示:
pax> plugh=xyzzy
pax> xyzzy=zorkmid
pax> echo ${plugh}
xyzzy
Run Code Online (Sandbox Code Playgroud)
但是,您也可以将名称的扩展视为另一个随后扩展的变量:
pax> echo ${!plugh}
zorkmid
Run Code Online (Sandbox Code Playgroud)
发生的事情plugh是 扩展为xyzzy,然后它本身再次扩展为zorkmid。
例如,在您的特定情况下,变量role设置为test1,以下几行是等效的:
deploy[$role]=${!role}
deploy[test1]=${test1}
Run Code Online (Sandbox Code Playgroud)