【发布时间】:2016-06-15 14:26:58
【问题描述】:
我们最近有一次使用 bash 的经验,即使我们找到了解决方案,它也一直在扭曲我的想法。 bash 如何根据返回码评估&& 表达式?
执行这个脚本应该会失败,因为myrandomcommand 不存在:
#!/bin/bash
set -e
echo "foo"
myrandomcommand
echo "bar"
结果是预期的:
~ > bash foo.sh
foo
foo.sh: line 6: myrandomcommand: command not found
[exited with 127]
~ > echo $?
127
但使用&& 表达式稍微更改代码:
#!/bin/bash
set -e
echo "foo"
myrandomcommand && ls
echo "bar"
ls 语句没有被执行(因为第一个语句失败并且不计算第二个语句),但是脚本的行为非常不同:
~ > bash foo.sh
foo
foo.sh: line 6: myrandomcommand: command not found
bar # ('bar' is printed now)
~ > echo $?
0
我们发现使用括号 (myrandomcommand && ls) 之间的表达式可以按预期工作(就像第一个示例一样),但我想知道为什么。
【问题讨论】:
-
BashFAQ#105 对你来说可能是一本有趣的书
标签: bash return return-value