2013-09-30 60 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' - 除了有效的语法外,没有方括号。 –