我一直试图弄清楚这有什么不对,但是无法弄清楚..
这部分似乎是一个错误..
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
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
calc_1.2: line 75: [: =: unary operator expected
Run Code Online (Sandbox Code Playgroud)
ric*_*ici 419
如果你知道你总是要使用bash,那么总是使用双括号条件复合命令[[ ... ]],而不是Posix兼容的单括号版本要容易得多[ ... ].在[[ ... ]]复合内部,单词拆分和路径名扩展不会应用于单词,因此您可以依赖
if [[ $aug1 == "and" ]];
Run Code Online (Sandbox Code Playgroud)
比较$aug1字符串的值and.
如果你使用[ ... ],你总是需要记住双引号变量,如下所示:
if [ "$aug1" = "and" ];
Run Code Online (Sandbox Code Playgroud)
如果你没有引用变量扩展并且变量未定义或为空,它就会从犯罪现场消失,只留下
if [ = "and" ];
Run Code Online (Sandbox Code Playgroud)
这不是一个有效的语法.(如果$aug1包含空格或shell元字符,它也会失败并显示不同的错误消息.)
现代[[运算符具有许多其他不错的功能,包括正则表达式匹配.
Juh*_*nia 24
我花了一段时间才发现这一点,但请注意,如果你有间距错误,你也会得到同样的错误:
[: =: unary operator expected
Run Code Online (Sandbox Code Playgroud)
正确:
if [ "$APP_ENV" = "staging" ]
Run Code Online (Sandbox Code Playgroud)
VS
if ["$APP_ENV" = "staging" ]
Run Code Online (Sandbox Code Playgroud)
一如既往地设置-x调试变量有助于找到这些:
set -x
Run Code Online (Sandbox Code Playgroud)