减法在bash不起作用
,我有以下问题bash脚本:减法在bash不起作用
validParameters=0
argumentLength=${#1}
argumentLength==$((argumentLength - 1))
#[code to increment validParameters]
if [[ $validParameters != argumentLength ]]
then
diff=$((argumentLength - validParameters))
printf "Attention:\n$diff invalid argument(s) found!\n"
fi
exit 1
在该行发生错误:diff=$((argumentLength - validParameters))
=3: syntax error: operand expected (error token is "=3")
用命令script.sh abc
如果我将diff设置为固定值(例如diff=1
)而不是减法,则该脚本完美地工作。
我的减法语法有点不对吗?
argumentLength==$((argumentLength - 1))
您在这里有两个=
s。它相当于:
argumentLength="=$((argumentLength - 1))"
这就是为什么错误消息说=3
。
听起来就像是一个变量argumentLength
和validParameters
没有不存储号码的事,但包括字符串=3
。
对于调试,尝试在减去它们之前先打印两个变量。
顺便说一下,你可以写((diff = argumentLength - validParameters))
。在您编辑后
编辑:发现的Bug
有一个=
在
argumentLength==$((argumentLength - 1))
写
argumentLength=$((argumentLength - 1))
或
((argumentLength--))
,而不是太多。
使用'--'是非标准的,所以可能不适用于其他shell。最简短的写法是'argumentLength = $(($ {#1} - 1))''。 –
@TomFenech我不认为提问者关心可移植性。他将问题标记为bash,并使用'[['也不便携。 – Socowi
尽管如此,在使用便携式语法或至少指定不是的事情时也没有什么坏处,所以当有人盲目地复制你的代码并且它不能在他们的系统上工作时,他们知道为什么。 –
您发布的脚本不会产生该错误。 –
我第二次TomFenech,不可能重现你的错误,有一些重要的东西你不显示。你使用'[['很奇怪。改用'[[validParameters -ne argumentLength]]'。 –
您在'[[$ validParameters!= argumentLength]]中缺少美元符号''。 –