作为初学者,我没有在任何地方找到答案,关于间距(语法)和解析的规则.
例如.
我可不可以做
if [$# -eq 2] ;
then
llll
fi
Run Code Online (Sandbox Code Playgroud)
或者我必须在对象之间留下一两个空白,如
if [ $# -eq 2 ] ;
then
llll
fi
Run Code Online (Sandbox Code Playgroud)
第二个相关的问题是关于它们之间的区别
if [[ $# -eq 2 ]] ;
then
wafwaf
fi
Run Code Online (Sandbox Code Playgroud)
我关心的是前后间距[,].
没有搜索为我提供了一套规则.
[之前和之后需要空格].
[实际上是命令的名称,是别名test.它不是一个特殊的符号,它只是一个具有不寻常名称的命令.
$ help '['
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
Run Code Online (Sandbox Code Playgroud)因为它是普通的命令名而不是特殊字符,所以在之后需要一个空格[.如果省略空格并写入[fooshell将搜索$PATH名为的命令[foo.
$ [ foo = foo ] && echo true
true
$ [foo = foo] && echo true
[foo: command not found
Run Code Online (Sandbox Code Playgroud)为了便于阅读,请[期待它的最后一个参数].作为一个普通的命令行参数,]必须在它之前有一个空格.如果没有空格,那么括号将成为前一个参数的最后一个字符,并[会抱怨其最后一个参数不存在].
$ [ foo = foo]
bash: [: missing `]'
$ [ foo = 'foo]'
bash: [: missing `]'
Run Code Online (Sandbox Code Playgroud)[[是一种bash增强功能,具有更多功能[,即对未加引号的变量名称进行更精细的处理.它需要两端的空间,相同[.但[[实际上是特殊的shell语法,并且解析方式不同.它的方式不是"普通命令" [.
有关[和之间区别的详细说明[[,请参阅: