`]` 的令牌标识符是什么?

`]` 的令牌标识符是什么?

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

比前两个答案更简单地说,]只是一个[需要运行的字符串。

相关内容