此脚本出现错误:
elif [ $operation = "man" ]; then
if [ $aug1 = "add" ]; then # <- Line 75
echo "Man Page for: add"
echo ""
echo "Syntax: add [number 1] [number 2]"
echo ""
echo "Description:"
echo "Add two different numbers together."
echo ""
echo "Info:"
echo "Added in v1.0"
echo ""
elif [ -z $aug1 ]; then
echo "Please specify a command to read the man page."
else
echo "There is no manual page for that command."
fi
我得到了这个错误:
calc_1.2: line 75: [: =: unary operator expected
发布于 2012-11-29 11:31:22
如果您知道总是要使用[ ... ]
,那么使用双括号条件复合命令Bash要比使用兼容POSIX的单括号版本Bash容易得多。在[[ ... ]]
复合中,单词拆分和路径名扩展不适用于单词,因此您可以依赖于
if [[ $aug1 == "and" ]];
将$aug1
的值与字符串and
进行比较。
如果使用[ ... ]
,则始终需要记住使用双引号将变量引起来,如下所示:
if [ "$aug1" = "and" ];
如果没有引用变量扩展,并且变量未定义或为空,则它将从犯罪现场消失,只剩下
if [ = "and" ];
这不是有效的语法。(如果$aug1
包含空白或外壳元字符,它也会失败,并显示不同的错误消息。)
现代的[[
运算符还有许多其他很好的特性,包括正则表达式匹配。
发布于 2017-09-22 04:43:41
我花了一段时间才找到它,但请注意,如果你有一个间距错误,你也会得到同样的错误:
[: =: unary operator expected
正确:
if [ "$APP_ENV" = "staging" ]
vs
if ["$APP_ENV" = "staging" ]
一如既往,设置-x
调试变量有助于找到这些变量:
set -x
发布于 2015-09-25 20:27:22
在if[]
语句中使用$aug1
之前,请尝试为其赋值;之后,错误消息将消失。
https://stackoverflow.com/questions/13617843
复制相似问题