使用此运算符时,我的脚本出现错误。我有一些在线文档,双等号应该可以工作。有任何想法吗?
Zsh 参考指南:http: //zsh.sourceforge.net/Doc/Release/Conditional-Expressions.html
脚本:
#!/bin/zsh
if [ $_user == "root" ]; then
echo "root"
else
echo "not root"
fi
运行它:
$ ./script.sh
./script.sh:3: = not found
简单的答案: a
==
是仅在构造内部的逻辑运算符。[[ … ]]
它也适用于 ksh 和 bash。
当在
[[ … ]]
构造之外使用时, =cmd 成为文件名扩展运算符,但仅在 zsh 中这就是
[ … ]
您使用的更简单的构造内部发生的情况。但是测试运行 shell 脚本的用户是 root 的正确方法是:
=cmd
是一个文件名扩展运算符,zsh
它扩展为cmd
(通过查找 解决$PATH
)的路径。如果没有找到这样的命令,则会导致致命错误,例如当 glob 不匹配时。因此
==
,在该命令的一个参数中,[
要求外壳程序在其中查找=
命令,$PATH
并zsh
告诉您那里没有这样的命令=
。在这里,要么使用
[
命令的标准语法:或引用
=
:您还需要正则表达式匹配的引号:
在任何情况下,当为空或未设置时,您都需要引用
$_user
,否则会出现一些令人困惑的错误(更糟糕的是,在(like )$_user
之外的类似 Korn 的 shell 中包括任意命令注入漏洞)。zsh
bash
您还可以通过禁用在脚本中不是很有用的
equals
选项 ( )来禁用该功能。set +o equals
或者使用
ksh
-style[[...]]
构造:或
case
构造:(
[[ = ]]
,[[ == ]]
并case
进行模式匹配(通配符,而不是正则表达式))请注意,这些是条件表达式,无需区分赋值运算符和相等运算符,因此不需要
==
运算符。切线的简短答案..也许您阅读了为在另一种外壳类型下运行而创建的示例?