2013-09-30 59 views
2
[ -r "$df" ] && { 
     tail -1 $df | grep "$was_fallback" > /dev/null  
     [ $? -ne 0 ] && { continue; }  

這是更大代碼的一部分。我正在閱讀一些由老年人編寫的舊代碼。然後我找到了這段代碼。 我知道[]是'如果'的條件。但是這是用來做什麼的?如果有多個條件

+0

我想有一個缺少'}'。第一行中的一行不匹配。 – fedorqui

回答

3
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. 
+1

所以,在這裏使用&&會使[]和{}塊同時運行,否則會發生其他事情? – Smith

+1

''''和'{}'不是塊。它們不一樣,功能也不一樣。在你的代碼中,這個人寫的不希望第二部分(用'{}')在同一個shell的上下文中運行。它們不能同時運行*因爲'&&'要求LH側首先執行並且只執行RH側* *如果LH側返回* true *。所以'']'先運行,然後''}'部分在[]'部分爲真時運行。 –

+0

只是爲了強化'if'命令:'if'基於[其「測試命令」的退出狀態進行操作](http://www.gnu.org/software/bash/manual/bashref.html#Conditional -結構體)。例如,要測試某個文件是否具有給定的模式,可以這樣寫:'if grep -q pattern file;然後回聲有模式;否則回聲不匹配; fi' - 除了有效的語法外,沒有方括號。 –