在bash中使用-e时,传递命令前的感叹号仍然不';不要使脚本失败

在bash中使用-e时,传递命令前的感叹号仍然不';不要使脚本失败,bash,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选项无法在命令返回失败的退出代码时使脚本失败,因为!半路

我以为下面的脚本只需打印“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选项无法在命令返回失败的退出代码时使脚本失败,因为!半路。有谁能给我一个解释,让我感觉好些吗?

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


但是如果您执行退出状态42,您的脚本将失败。

顺便说一句,解决方法是
!回声你好| |退出1