Bash-if语句中何时需要方括号?
通常,我在if语句中使用方括号:Bash-if语句中何时需要方括号?,bash,if-statement,square-bracket,Bash,If Statement,Square Bracket,通常,我在if语句中使用方括号: if [ "$name" = 'Bob' ]; then ... if [ "$name" = 'Bob' ]; then ... 但是,当我检查grep是否成功时,我没有使用方括号: if grep -q "$text" $file ; then ... 在if语句中何时需要方括号?[实际上是一个命令,与test命令等效(几乎,见下文)。它不是shell语法的一部分。(两者都[和test,这取决于shell,通常也是内置命令,但这并不影响它们的行为,除了
if [ "$name" = 'Bob' ]; then ...
if [ "$name" = 'Bob' ]; then ...
但是,当我检查grep是否成功时,我没有使用方括号:
if grep -q "$text" $file ; then ...
在
if
语句中何时需要方括号?[
实际上是一个命令,与test
命令等效(几乎,见下文)。它不是shell语法的一部分。(两者都[
和test
,这取决于shell,通常也是内置命令,但这并不影响它们的行为,除了性能之外。)
if
语句执行命令,如果命令成功,则执行部分,如果失败,则执行else
部分(如果有)。(如果命令退出时状态($?
)为0,则命令成功,如果退出时状态为非零,则命令失败。)
在
命令是
[ "$name" = 'Bob' ]
grep -q "$text" $file
(您可以直接执行相同的命令,而无需使用if
)
在
命令是
[ "$name" = 'Bob' ]
grep -q "$text" $file
man[
或man测试
了解更多信息
脚注:嗯,[
命令几乎等同于测试
命令。区别在于[
要求]
作为其最后一个参数,而测试
不——事实上不允许它(更准确地说,测试
不处理]
参数;例如,它可能是一个有效的文件名)。(它不必以这种方式实现,但是如果[
没有匹配的]
会让很多人非常紧张。)[
实际上是一个命令,相当于(几乎,见下文)它不是shell语法的一部分。(根据shell的不同,[
和test
通常也是内置命令,但这并不影响它们的行为,性能除外。)
if
语句执行命令,如果命令成功,则执行部分,如果失败,则执行else
部分(如果有)。(如果命令退出时状态($?
)为0,则命令成功,如果退出时状态为非零,则命令失败。)
在
命令是
[ "$name" = 'Bob' ]
grep -q "$text" $file
(您可以直接执行相同的命令,而无需使用if
)
在
命令是
[ "$name" = 'Bob' ]
grep -q "$text" $file
man[
或man测试
了解更多信息
脚注:嗯,[
命令几乎等同于测试
命令。区别在于[
要求]
作为其最后一个参数,而测试
不——事实上不允许它(更准确地说,测试
不处理]
参数;例如,它可能是一个有效的文件名)。(它不必以这种方式实现,但是如果[
没有匹配的]
,会让很多人非常紧张。)方括号是test
命令的同义词。if
语句检查命令的退出状态,以决定执行哪个分支。grep-q“$text”
是命令,但“$name”='Bob'
不是——它只是一个表达式。test
是一个命令,它接受一个表达式并对其求值:
if test "$name" = 'Bob'; then ...
由于方括号是test
命令的同义词,因此可以将其重写为原始语句:
if [ "$name" = 'Bob' ]; then ...
if [ "$name" = 'Bob' ]; then ...
方括号是test
命令的同义词。if
语句检查命令的退出状态,以决定采用哪个分支。grep-q“$text”
是命令,但“$name”='Bob'
不是——它只是一个表达式。test
是一个命令,它接受一个表达式并对其求值:
if test "$name" = 'Bob'; then ...
由于方括号是test
命令的同义词,因此可以将其重写为原始语句:
if [ "$name" = 'Bob' ]; then ...
if [ "$name" = 'Bob' ]; then ...
认为<代码> […] /代码>语法的最好方法是考虑<代码> [< /代码>是一个程序,它是!
看看这个:
~ $ ls /usr/bin/\[
/usr/bin/[
另一方面,您可能没有使用该版本,因为bash
还提供了作为shell内置的[
无论如何,要回答您的问题:如果运行您给它的命令并看到它,那么返回值是否为0
。您可以使用[
进行其他更有趣的比较,例如字符串比较。请参阅man[
和man bash
思考[…]的最佳方式语法,是要考虑<代码> [/COD]是一个程序,它是!
看看这个:
~ $ ls /usr/bin/\[
/usr/bin/[
另一方面,您可能没有使用该版本,因为bash
还提供了作为shell内置的[
无论如何,要回答您的问题:如果
运行您给它的命令并看到它,返回值是否为0
。您可以使用[
进行其他更有趣的比较,例如字符串比较。请参阅man[
和man bash
单方括号可以跨多个shell兼容,但是其中一些shell(包括bash)支持首选的双方括号。有关详细信息,请参阅。另请参阅帮助'['
单方括号可以跨多个shell兼容,但是其中一些shell(包括Bash)支持首选的双方括号。有关详细信息,请参阅。另请参阅帮助'['
@chepner:为什么如果$boolean\u var;那么…
不需要括号?@misha,如果您的$boolean\u var
具有该值“true”或“false”之所以有效,是因为您正在运行命令true
或false
如果$boolean\u var;那么如果$boolean\u var是0
或1
,则…
不起作用,请参见man-true
和man-false
@derFunk:它会起作用