Bash 手册说:
当使用 [ 形式时,命令的最后一个参数必须是 ]。
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
So]
不是保留字,也不是运算符,也不是内置命令。
作为代币, 的代币标识符是什么]
?单词还是名字?
答案1
]
补语[
,是[
命令的结束符号。
正如man
页面所指出的,这实际上是 的一个论点[
,但[
恰好将其特别视为结尾。
您可以将其与其他一些命令关闭模式类似,例如;
在find .. exec
.
答案2
Bash 不会将[
或]
字符(单独)视为与字母表中的字母有任何不同。
在这种情况下,bash 看到一个“单词”,[
,并寻找具有该名称的命令。如果您查看文件系统,您可能会发现/bin/[
(或/usr/bin/[
) 作为可执行文件存在。碰巧的是,bash 还提供了一个内置版本(为了提高效率),但这只是一个实现细节。
该[
命令(如具有该名称的可执行文件)有一个规则,即传递给它的最后一个参数应该是]
,否则会引发错误。这可能部分是因为它美观,但它也可以保护您免受意外截断的命令的影响,这很好。
事实是这些都是不特别这就是为什么不能省略 or 前后的空格的[
原因]
。
例外情况:
- 当
[
和]
以正确的格式出现在同一个单词中时,例如[a-z]
,那么是特殊和 bash 的通配规则适用。 - 命令
[[
是特殊并且可以做很多[
不能做的事情(并且内部参数的[[ .. ]]
处理方式不同,一些换行符也是如此)。相应的]]
也很特殊,因为它是 shell 保留字,不能是命令名,并终止关键字后面的特殊处理[[
。
答案3
比前两个答案更简单地说,]
只是一个[
需要运行的字符串。