Bash:'[[' 也是一个类似于 '[' 的程序吗?

man*_*tor 4 linux bash test

测试条件[是一个程序,它驻留在基于 debian 的/usr/bin/[. 我想知道另一个条件测试仪[[是否也是一个程序?

我问的原因是:我sudo向某个用户授予了权限,让他触发 shell 脚本。出于安全原因,我添加了该脚本中使用的每个程序(echoto/bin/echo[to /usr/bin/[)的完整路径,以便用户无法更改PATH他的程序以使用他自己的程序。现在我想知道我是否也必须改变[[

Hau*_*ing 5

man bash

保留字
保留字是对 shell 有特殊意义的字。以下单词在不加引号时被识别为保留字,或者是简单命令的第一个单词(参见下面的 SHELL GRAMMAR)或 case 或 for command 的第三个单词:

!case coproc do done elif else esac fi for function if in select then until while { } time [[]]

所以[[是一个保留字,因此不能是外部命令。不过,可能有这样的文件,但必须使用完整路径或引号来调用它。

即使有这样一个外部命令,它也不会以同样的方式工作,因为[[作为 shell 语法的一部分,直到下一个]]. 外部命令无法做到这一点。