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之外