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 - 程序集 x86(32 位),调用 NR_creat (8) 破坏文件名存储

linux - FASTQ header 中字符串后的 Bash 条件 IF 语句

bash - 同时在屏幕和文件上显示标准输出

linux - FISH:如何在启动 Fish 时设置特定的 $fish_function_path?

linux - 在 bash 脚本中使用 emacs 打开和关闭 txt 文件

linux - 从文件名中删除前导和尾随空格

c - 带有局部变量地址的 pthread_exit() 有时有效吗?

linux - 如何在 Linux 中用 OpenGL ES 画东西?

git - 如何在没有提交消息的情况下获取 git log

bash - 逐行读取文件时读取bash脚本中文件的最后一行