我可以在bash中用短路表达式分配变量吗?
x=''
y='aaa'
( [ ! -z "$x" ] && (echo "using SGE ID" >&2; num="$x") ) || ( [ ! -z "$y" ] && (num="z$y" && echo "trying y" ) )
echo "num : $num : $y"
exit 0
返回:
trying y
num : : aaa
似乎达到了分配点,但是没有评估,或者它是否在错误的范围内?
答案 0 :(得分:3)
你可以,但是括号不是传统意义上的分组。括号内的命令在子shell中运行,子shell中的任何变量赋值都是该shell的本地,在它外面是不可见的。
使用大括号;请注意,如果它出现在同一行上,则需要一个分号才能在结束括号之前终止该命令。
x=''
y='aaa'
{ [ ! -z "$x" ] && { echo "using SGE ID" >&2; num="$x"; }; } ||
{ [ ! -z "$y" ] && { num="z$y" && echo "trying y"; }; }
echo "num : $num : $y"
exit 0