Bash手册说:
当使用 [ 形式时,命令的最后一个参数必须是 ]。
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
Run Code Online (Sandbox Code Playgroud)
所以]不是保留字,也不是运算符,也不是内置命令。
作为令牌, 的令牌标识符是]什么?单词还是名字?
hee*_*ayl 21
]补充[,它是[命令的结束符号。
正如man页面所指出的,这实际上是 的一个论点[,但[碰巧将其特别视为结尾。
您可以将其与其他一些命令关闭模式类似,例如;在find .. exec.
ams*_*ams 19
Bash 不会将[或]字符(单独)视为与字母表中的字母有任何不同。
在这种情况下,bash 看到一个“词”,[,并寻找具有该名称的命令。如果您查看您的文件系统,您可能会发现/bin/[(或/usr/bin/[)作为可执行文件存在。碰巧的是,bash 还提供了一个内置版本(为了效率),但这只是一个实现细节。
该[命令(如具有该名称的可执行文件)有一个规则,即您传递给它的最后一个参数应该是],否则它会引发错误。这可能部分是因为它在美学上令人愉悦,但它还可以保护您免受意外截断的命令的影响,这很好。
这些并不特殊的事实就是为什么您不能省略[or前后的空格]。
例外:
[和]以正确的格式出现在同一个单词中时,例如[a-z],那么这是特殊的并且 bash 的通配规则适用。[[命令很特殊,可以做很多不能做的事情[(并且内部参数[[ .. ]]的处理方式不同,一些换行符也是如此)。对应]]的也是特殊的,因为它是一个shell保留字,不能作为命令名,终止跟在[[关键字后面的特殊处理。| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |