Bash:“[[”也是一个像“[”一样的程序吗?

Bash:“[[”也是一个像“[”一样的程序吗?

测试条件[是一个程序,该程序驻留在基于 debian 的发行版上/usr/bin/[。我想知道另一个条件测试器是否[[也是一个程序?

我问的原因是:我授予sudo某个用户权限,让他触发shell脚本。出于安全原因,我添加了该脚本中使用的每个程序(echoto/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 语法的一部分,会更改解析规则,直到下一个]].外部命令无法做到这一点。

相关内容