2017-07-28 41 views
3

我想下面的腳本將只打印「你好」,然後用「1」退出在bash使用-e時,路過的命令前的感嘆號仍然不會導致腳本失敗

#!/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

btw解決方法是'! echo hello ||出口1'。 – Alex028502

回答

2

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

的-e命令將失敗的腳本進行任何命令返回非零代碼,除了一些情況下,如while循環,或命令返回0,但倒!選項。因此您的! echo hello將返回1(0反轉!),但-e選項不會失敗。

但是,如果你製作了exit status 42,你的腳本就會失敗。