linux - declare -A 在 Linux shell 中做什么?

标签 linux bash shell

我对 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/

相关文章:

java - 如何同时在不同的linux系统上运行一个jar

linux - 如何在不设置 RPATH 的情况下设置 RUNPATH

json - 如果对应于给定键的值以指定字符串开头,则使用 jq 更新 JSON 文档中的对象

java - 如何在 Windows 的 shell 脚本中配置 JAVA_HOME

c - 在 C 中执行时显示完成百分比

linux - Docker:使用私有(private)层而不运行注册表实例

c++ - 带有 boost 文件系统库的 LD_PRELOAD

linux - 从特定行和列读取值

bash - 我怎样才能直接ssh到一个特定的目录?

linux - 以增量方式在一组文件上实现 bash 脚本