1
ok="1"
test -f no_such_file || (ok='0' && echo ggg)
> ggg
echo $ok
> 1

为什么$ok还在1?在这种情况下我该怎么做0

4

2 回答 2

3

试试这样写:

test -f no_such_file || { ok='0'; echo ggg; }

{ } 会给你分组,但不会启动子shell。&& 在这种情况下没有用,所以我用 ';' 代替了它。

于 2013-04-12T01:45:43.507 回答
2

原因是它(ok='0' && echo ggg)在子外壳中运行,因为它包含在()s 中。如果你在没有括号的情况下运行它:

ok="1"
test -f no_such_file || ok='0' && echo ggg
> ggg
echo $ok
> 0

您必须调整逻辑以将赋值语句留在()s之外

于 2013-04-12T00:45:07.830 回答