ok="1"
test -f no_such_file || (ok='0' && echo ggg)
> ggg
echo $ok
> 1
为什么$ok
还在1
?在这种情况下我该怎么做0
?
试试这样写:
test -f no_such_file || { ok='0'; echo ggg; }
{ } 会给你分组,但不会启动子shell。&& 在这种情况下没有用,所以我用 ';' 代替了它。
原因是它(ok='0' && echo ggg)
在子外壳中运行,因为它包含在()
s 中。如果你在没有括号的情况下运行它:
ok="1"
test -f no_such_file || ok='0' && echo ggg
> ggg
echo $ok
> 0
您必须调整逻辑以将赋值语句留在()
s之外