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/

相关文章:

linux - 在服务请求时将队列锁定在 block 设备驱动程序中的正确方法

linux - 在Ubuntu Linux(多节点丛集)上执行Hadoop

linux - 使用字符串输入查找文件名的 Shell 脚本

linux - 在Linux中安装脚本是什么意思

Python - 更优雅地清除终端屏幕

c++ - 以管理员身份运行命令行进程 Qt

c++ - Linux中的线程状态

bash - 如果有同名的别名,如何在 bash 中调用函数?

linux - Shell 括号和引号

java - Tizen Mobile 和 iPad Linux - 它是否允许 GCC 和 Java?