首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash if条件中出现"unary operator expected“错误

Bash if条件中出现"unary operator expected“错误
EN

Stack Overflow用户
提问于 2012-11-29 10:22:47
回答 4查看 488.2K关注 0票数 300

此脚本出现错误:

代码语言:javascript
运行
复制
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

我得到了这个错误:

代码语言:javascript
运行
复制
calc_1.2: line 75: [: =: unary operator expected
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-29 11:31:22

如果您知道总是要使用[ ... ],那么使用双括号条件复合命令Bash要比使用兼容POSIX的单括号版本Bash容易得多。在[[ ... ]]复合中,单词拆分和路径名扩展不适用于单词,因此您可以依赖于

代码语言:javascript
运行
复制
if [[ $aug1 == "and" ]];

$aug1的值与字符串and进行比较。

如果使用[ ... ],则始终需要记住使用双引号将变量引起来,如下所示:

代码语言:javascript
运行
复制
if [ "$aug1" = "and" ];

如果没有引用变量扩展,并且变量未定义或为空,则它将从犯罪现场消失,只剩下

代码语言:javascript
运行
复制
if [ = "and" ];

这不是有效的语法。(如果$aug1包含空白或外壳元字符,它也会失败,并显示不同的错误消息。)

现代的[[运算符还有许多其他很好的特性,包括正则表达式匹配。

票数 648
EN

Stack Overflow用户

发布于 2017-09-22 04:43:41

我花了一段时间才找到它,但请注意,如果你有一个间距错误,你也会得到同样的错误:

代码语言:javascript
运行
复制
[: =: unary operator expected

正确:

代码语言:javascript
运行
复制
if [ "$APP_ENV" = "staging" ]

vs

代码语言:javascript
运行
复制
if ["$APP_ENV" = "staging" ]

一如既往,设置-x调试变量有助于找到这些变量:

代码语言:javascript
运行
复制
set -x
票数 43
EN

Stack Overflow用户

发布于 2015-09-25 20:27:22

if[]语句中使用$aug1之前,请尝试为其赋值;之后,错误消息将消失。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13617843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档