我在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=$1
Config=$([ "$env" == "qa" ]] && echo "${ConfigA[@]}" || echo "${ConfigB[@]}")
但是在上面的例子中我得到了输出
hostname1 hostname2
但它不是一个数组,因为当我尝试遍历它时,它会立即打印出来。
我还尝试在()
内围绕数组
Config=$([ "$env" == "qa" ]] && echo "( ${ConfigA[@]} )" || echo "( ${ConfigB[@]} )")
但这也无济于事。
如何使用三元运算符将数组分配给新变量?
我知道我可以用if-else
条件来做,但我想用三元运算符
感谢您的帮助
答案 0 :(得分:1)
因此,在第二种情况下,不要将()
置于引号内,而是将另一种方法分配给变量,如
[ "$env" == "qa" ]] && Config=( "${ConfigA[@]}" ) || Config( "${ConfigB[@]}" )
作品
发生了什么事
Config=$([ "$env" == "qa" ]] && echo "( ${ConfigA[@]} )" || echo "( ${ConfigB[@]} )")
是echo将数组转换为字符串并在其周围添加()
,因此无法正常工作
答案 1 :(得分:0)
没有简单的方法可以在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