在 bash 4.3 脚本中,我有变量:
环境=“本地” config_local=(“a”“b”“b”“d”) copy_from="config_${环境}"
我想将名称存储在数组中的值复制copy_from
到另一个名为 的数组中config
。
我尝试了这个和一些变体:
配置=${!copy_from} 回显“${配置[@]}” 配置=${!copy_from[@]} 回显“${配置[@]}” 配置=(“${!copy_from}”) 回显“${配置[@]}” 配置=(“${!copy_from[@]}”) 回显“${配置[@]}”
但我无法将整个数组复制到config
并仅获取0
或仅获取第一个元素:
A 0 A 0
我怎样才能在 bash 中做到这一点?
答案1
有多种方法可以做到这一点eval
,但它们是不安全的。那里是在 bash 2.05b+ 上执行此操作的一些方法:
$ foo=(a b c)
$ name=foo
$ temp_indirect=${name}[@]
$ printf '<%s>\n' "${!temp_indirect}"
<a>
<b>
<c>
这非常丑陋,因为它依赖于(可能没有记录?) bash 解析器的实现细节,所以使用它需要您自担风险。
一般来说,如果你想要复杂的数据结构,我建议使用另一种语言。在许多情况下,有一些解决方法可以使它们在 bash 中成为可能,但语法很深奥,因为该语言没有针对它们进行优化(它主要针对 IPC 和文件操作进行了优化)。