在bash短路单线程中的分配

时间:2015-08-07 00:00:06

标签: bash conditional-statements

我可以在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

似乎达到了分配点,但是没有评估,或者它是否在错误的范围内?

1 个答案:

答案 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