据我所知,[[
是 的增强版本[
,但是当我将其[[
视为关键字并[
显示为内置时,我感到困惑。
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
Run Code Online (Sandbox Code Playgroud)
TLDP说
内置命令可能是同名系统命令的同义词,但 Bash 在内部重新实现了它。例如,Bash echo 命令与 /bin/echo 不同,尽管它们的行为几乎相同。
和
关键字是保留字、标记或运算符。关键字对 shell 有特殊的意义,实际上是 shell 语法的构建块。例如,for、while、do 和 ! 是关键字。与内置函数类似,关键字被硬编码到 Bash 中,但与内置函数不同的是,关键字本身不是命令,而是命令结构的子单元。[2]
难道不应该使双方[
和[[
关键字?有什么我在这里想念的吗?此外,此链接再次确认两者[
和[[
应该属于同一类。
这两者有什么区别吗。
[[ $a == z* ]]
Run Code Online (Sandbox Code Playgroud)
和
[ $a == z* ]
Run Code Online (Sandbox Code Playgroud)
我可以举一个例子,他们会有不同的输出吗?
此外, 的工作方式[[ ]]
与[ ]
?
从Make bash use external `time` 命令而不是 shell built-in,Stéphane Chazelas 写道:
没有
time
内置 bash。time
是一个关键字,所以你可以做例如time { foo; bar; }
我们可以验证一下:
$ type -a time
time is a shell keyword
time is /usr/bin/time
Run Code Online (Sandbox Code Playgroud)
它没有显示time
可以是内置命令。
“关键字”与“Bash 参考手册”中的“保留字”是同一个概念吗?
保留字
一个对壳有特殊意义的词。大多数保留字都引入了 shell 流控制结构,例如
for
和while
。
关键字是否一定不是命令(或不是内置命令)?
作为关键字,是time
不是命令(或不是内置命令)?
根据关键字和内建的定义,为什么time
不是内建而是关键字?
为什么“你可以做例如time { foo; bar; }
”因为“time
是一个关键字”?