测试条件[
是一个程序,该程序驻留在基于 debian 的发行版上/usr/bin/[
。我想知道另一个条件测试器是否[[
也是一个程序?
我问的原因是:我授予sudo
某个用户权限,让他触发shell脚本。出于安全原因,我添加了该脚本中使用的每个程序(echo
to/bin/echo
和[
to /usr/bin/[
)的完整路径,以便用户无法更改他的PATH
程序以使用他自己的程序。现在我想知道我是否也必须改变[[
。
答案1
man bash
保留字
保留字是对 shell 有特殊含义的字。以下单词在未加引号时被识别为保留字,并且是简单命令的第一个字(请参见下面的 SHELL GRAMMAR)或 case 或 for 命令的第三个字:! case coproc do done elif else esac fi for function if in select then Until while { } time [[ ]]
[[
保留字也是如此,因此不能是外部命令。不过,可能存在这样的文件,但必须使用完整路径或引号来调用它。
即使存在这样的外部命令,它也不会以相同的方式工作,因为[[
作为 shell 语法的一部分,会更改解析规则,直到下一个]]
.外部命令无法做到这一点。