[ -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