如何在bash测试命令中分配变量?

时间:2013-04-12 00:26:43

标签: bash shell

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

为什么$ok仍为1?在这种情况下如何才能0

2 个答案:

答案 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

之外