答案1
在zsh
,=cmd
是一个文件名扩展运算符,它扩展为命令的路径cmd
。=cmd
类似于$commands[cmd]
。
因此,在这里,使用命令==
的参数之一[
,将其扩展为命令的路径=
。由于=
您的 中没有调用任何命令$PATH
,因此会导致错误。
比较:
$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found
命令中的相等运算符[
是=
。该[
命令只执行测试,不执行任何赋值,因此不需要像其他一些语言中那样区分赋值运算符和相等比较运算符(例如 C 中的=
vs或其他语言中的vs等) 。==
:=
=
所以它应该只是:
[ "$USER" = root ]
仍然是[
of zsh
,就像 of 一样ksh
也支持==
作为 的替代选项=
,但除非您禁用该equals
选项(就像在ksh
模拟中一样),否则您需要至少引用第一个=
以避免该=cmd
运算符:
[ "$USER" '==' root ]
请注意, while$USERNAME
是由 自动设置的zsh
,$USER
但不是(尽管它被诸如 之类的东西设置为环境变量login
)。
要测试您是否具有超级用户权限,检查您的有效用户 ID 是否为 0 更为可靠,这可以在zsh
或bash
中使用[ "$EUID" -eq 0 ]
或完成(( EUID == 0 ))
。
也可以看看:
答案2
这行代码在语法上并不正确(但bash
可以处理它):
if [ $USER == 'root' ]
您应该==
仅与[[
...一起使用]]
,=
否则。$USER
如果您继续使用[
...]
语法,我还建议您使用双引号
if [[ "$USER" == 'root' ]]
或者
if [ "$USER" = 'root' ]