Shell 方括号中的壳间距
作为一个初学者,我在任何地方都找不到答案,关于空格(语法)和语法分析的规则 比如说 我能做什么Shell 方括号中的壳间距,shell,syntax,Shell,Syntax,作为一个初学者,我在任何地方都找不到答案,关于空格(语法)和语法分析的规则 比如说 我能做什么 if [$# -eq 2] ; then llll fi 或者我必须在对象之间始终有一个或两个空格,如 if [ $# -eq 2 ] ; then llll fi 第二个相关问题是关于 if [[ $# -eq 2 ]] ; then wafwaf fi 我关心的是[,]前后的间距 没有搜索为我提供一组规则。在[之后和]之前需要空格 $ [ foo = foo] bash:
if [$# -eq 2] ;
then
llll
fi
或者我必须在对象之间始终有一个或两个空格,如
if [ $# -eq 2 ] ;
then
llll
fi
第二个相关问题是关于
if [[ $# -eq 2 ]] ;
then
wafwaf
fi
我关心的是[
,]
前后的间距
没有搜索为我提供一组规则。在
[
之后和]
之前需要空格
$ [ foo = foo]
bash: [: missing `]'
$ [ foo = 'foo]'
bash: [: missing `]'
[
实际上是一个命令的名称,是测试的别名。它不是一个特殊符号,只是一个具有不寻常名称的命令
$ 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 `['.
[
之后需要一个空格。如果省略空格并写入[foo
,shell将在$PATH
中搜索名为[foo
的命令
$ [ foo = foo ] && echo true
true
$ [foo = foo] && echo true
[foo: command not found
[
希望它的最后一个参数正好是]
。作为一个普通的命令行参数,]
前面必须有一个空格。如果没有空格,则括号将成为前一个参数的最后一个字符,[
会抱怨它的最后一个参数不是]
$ [ foo = foo]
bash: [: missing `]'
$ [ foo = 'foo]'
bash: [: missing `]'
[
是一种bash增强功能,比[
具有更多的功能,即对不带引号的变量名进行更合理的处理。它要求两端都有一个空格,与[
相同。然而[
实际上是一种特殊的shell语法,解析方式也不同。它不像[
那样是一个“普通命令”
有关[
和[[
之间差异的详细说明,请参阅:
[[
是特殊语法这一事实并不意味着它是自定界的。你需要在[[[
和]
前后使用空格(或自定界字符),就像[
和]
。自定界字符是空格、制表符和|&()
(这是由于bash的特性,因为(
和&
都是标记。但这是一个很好的近似值。)