在bash中使用-e时,传递命令之前的感叹号仍然不会导致脚本失败

时间:2017-07-28 07:16:29

标签: bash

我认为以下脚本只会打印'hello'然后以'1'

退出
#!/bin/bash -e

! echo hello
echo world

然而,它打印

hello
world

并以0

退出

以下脚本以1:

退出
#!/bin/bash -e

! echo hello

以下

#!/bin/bash -e

echo hello | grep world
! echo hello
echo world

但由于某种原因,当命令返回失败的退出代码时,-e选项无法使脚本失败!中途。任何人都可以提供一个让我对此感觉更好的解释吗?

1 个答案:

答案 0 :(得分:2)

http://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin

对于任何返回非零代码的命令,-e命令将使脚本失败,除了某些情况,例如while循环,或者返回0但是反转的命令!选项。因此,! echo hello将返回1(0 !反转),但-e选项不会失败。

但如果你制作exit status 42,你的脚本就会失败。