【问题标题】:difference between "bash -eu" . and "bash -e""bash -eu" 之间的区别。和“bash -e”
【发布时间】:2018-05-16 19:25:53
【问题描述】:

抱歉,如果这是重新发布。我在发布之前进行了搜索(没有运气)。

"bash -e" 如果有任何错误,将会出错/失败。它不包括“bash -u”条件吗?如果未设置参数,使用该参数的命令是否会失败并被“bash -e”捕获?

在这种情况下,“bash -eu”不等于“bash -e”吗?

【问题讨论】:

  • 否 - 只需在命令行上尝试:set -e; echo $idontexist - 退出状态为 0,set -e 不在乎。
  • -eu 是我们在欧洲的做法。 u 有助于意外引用未定义的变量。 e 在未检查的错误上使脚本失败。阅读友好手册#rtfm。

标签: shell unix scripting


【解决方案1】:

不,bash -ebasherrexit shell 选项集开始)与bash -e -ubasherrexitnounset 集开始)不同。

例子:

$ bash -e -c 'echo "hello $string"'
hello
$ echo "$?"
0
$ bash -e -u -c 'echo "hello $string"'
bash: string: unbound variable
$ echo "$?"
1

only errexit 下使用未设置的变量不是错误,它只是扩展为一个空字符串。

还有:

$ bash -u -c 'echo "hello $string"'
bash: string: unbound variable
$ echo "$?"
127

这显示了-e-u 之间的细微差别。只有-ubash 以代码 127 退出,这意味着“找不到命令”错误。对于-e-ubash 会以更通用的错误代码 1 退出。


这些情况也适用于 POSIX sh shell,尽管我不认为 127 退出状态对于上一个示例明确是必需的。

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 2011-09-03
    • 2011-12-13
    • 2022-06-28
    • 2015-04-01
    • 2020-08-22
    • 2018-08-26
    • 2013-01-19
    相关资源
    最近更新 更多