在 bash 中的字符串内复制带有数组名称的数组

在 bash 中的字符串内复制带有数组名称的数组

在 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 和文件操作进行了优化)。

相关内容