是否可以将布尔表达式的结果连续存储到变量中?
实施例
ret=0
for each in aCollection do
executeSomeCommand;
# vvv compare stored value against a returned value and store it again
ret=$ret || $?;
done;
[[ ret = 0 ]] && echo "success"
问题是如果$?
为1
,那么$ret
仍然包含零
ret=0
echo $ret # --> 0
ret=$ret || 1
echo $ret # --> 0 (should be 1)
答案 0 :(得分:4)
您有分组/操作顺序问题。当你这样做
ret=$ret || 1
它首先执行ret=$ret
然后获取结果并使用||
执行1
,然后忽略其结果。因此,您正在执行的任务的唯一部分是再次为自己分配ret
。
你想要的是$ret || 1
部分并存储结果,所以你需要像
ret=$(($ret || 1))