ok="1"
test -f no_such_file || (ok='0' && echo ggg)
> ggg
echo $ok
> 1
为什么$ok
仍为1
?在这种情况下如何才能0
?
答案 0 :(得分:3)
尝试这样写:
test -f no_such_file || { ok='0'; echo ggg; }
{}会给你分组,但不会启动子shell。和&&在这种情况下没用,所以我用';'替换它。
答案 1 :(得分:2)
原因是(ok='0' && echo ggg)
在子shell中运行,因为它包含在()
中。如果你在没有括号的情况下运行它:
ok="1"
test -f no_such_file || ok='0' && echo ggg
> ggg
echo $ok
> 0
您必须调整逻辑以将赋值语句保留在()
s