[ -r "$df" ] && {
tail -1 $df | grep "$was_fallback" > /dev/null
[ $? -ne 0 ] && { continue; }
這是更大代碼的一部分。我正在閱讀一些由老年人編寫的舊代碼。然後我找到了這段代碼。 我知道[]是'如果'的條件。但是這是用來做什麼的?如果有多個條件
[ -r "$df" ] && {
tail -1 $df | grep "$was_fallback" > /dev/null
[ $? -ne 0 ] && { continue; }
這是更大代碼的一部分。我正在閱讀一些由老年人編寫的舊代碼。然後我找到了這段代碼。 我知道[]是'如果'的條件。但是這是用來做什麼的?如果有多個條件
I know that [ ] is for 'if' condition
號這不是如果條件。 [
是測試命令。更多關於它在這裏:
What is the difference between test, [ and [[ ?
what is this {} used for?
這就是所謂的command grouping。從GNU手冊:
{}
{ list; }
Placing a list of commands between curly braces causes the list to be
executed in the current shell context. No subshell is created.
The semicolon (or newline) following list is required.
所以,在這裏使用&&會使[]和{}塊同時運行,否則會發生其他事情? – Smith
''''和'{}'不是塊。它們不一樣,功能也不一樣。在你的代碼中,這個人寫的不希望第二部分(用'{}')在同一個shell的上下文中運行。它們不能同時運行*因爲'&&'要求LH側首先執行並且只執行RH側* *如果LH側返回* true *。所以'']'先運行,然後''}'部分在[]'部分爲真時運行。 –
只是爲了強化'if'命令:'if'基於[其「測試命令」的退出狀態進行操作](http://www.gnu.org/software/bash/manual/bashref.html#Conditional -結構體)。例如,要測試某個文件是否具有給定的模式,可以這樣寫:'if grep -q pattern file;然後回聲有模式;否則回聲不匹配; fi' - 除了有效的語法外,沒有方括號。 –
我想有一個缺少'}'。第一行中的一行不匹配。 – fedorqui