使用三元运算符将数组分配给 bash 中的另一个变量

Using Ternary operator to assign an array to another variable in bash

我在 bash 脚本中有两个数组 说

ConfigA=("hostname1" "hostname2")
ConfigB=("hostname3" "hostname4")

现在我将一个参数传递给脚本,指定我需要使用哪个数组

为此我想出了一个 bash 相当于下面的三元运算符

int a = (b == 5) ? c : d;

equilvalent in bash

a=$([ "$b" == 5 ] && echo "$c" || echo "$d")

我尝试在我的案例中使用它,如下所示

env=
Config=$([ "$env" == "qa" ]] && echo "${ConfigA[@]}" || echo "${ConfigB[@]}")

但是在上面的例子中我得到了输出

hostname1 hostname2

但它不是数组,因为当我尝试遍历它时,它会同时打印两者。

我也试过像

一样把数组包围在()之内
Config=$([ "$env" == "qa" ]] && echo "( ${ConfigA[@]} )" || echo "( ${ConfigB[@]} )")

但这也无济于事。

如何使用三元运算符将数组分配给新变量?

我知道我可以用 if-else 条件来做,但我想用三元运算符来做

感谢您的帮助

因此,在第二种情况下,不是在引号内使用 (),而是另一种将数组分配给变量的方法,例如

[ "$env" == "qa" ]] && Config=( "${ConfigA[@]}" ) || Config( "${ConfigB[@]}" )

有效

发生了什么
Config=$([ "$env" == "qa" ]] && echo "( ${ConfigA[@]} )" || echo "( ${ConfigB[@]} )")

是 echo 将数组转换为字符串并在其周围附加了 (),因此它不起作用

bash.

中没有简单的方法可以将数组从一个变量复制到另一个变量

根据此 Bash: How to assign an associative array to another variable name (e.g. rename the variable)?,您可以使用以下解决方法:

[[ "$env" == "qa" ]] && eval $(declare -p ConfigA | sed 's/ConfigA/Config/') || eval $(declare -p ConfigB | sed 's/ConfigB/Config/')
echo ${Config[*]}
hostname3 hostname4