使用三元运算符将数组分配给 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
我在 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