2017-08-25 30 views
-1

,我有以下问题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)而不是减法,则该脚本完美地工作。

我的减法语法有点不对吗?

+0

您发布的脚本不会产生该错误。 –

+0

我第二次TomFenech,不可能重现你的错误,有一些重要的东西你不显示。你使用'[['很奇怪。改用'[[validParameters -ne argumentLength]]'。 –

+1

您在'[[$ validParameters!= argumentLength]]中缺少美元符号''。 –

回答

2
argumentLength==$((argumentLength - 1)) 

您在这里有两个= s。它相当于:

argumentLength="=$((argumentLength - 1))" 

这就是为什么错误消息说=3

0

听起来就像是一个变量argumentLengthvalidParameters没有存储号码的事,但包括字符串=3

对于调试,尝试在减去它们之前先打印两个变量。

顺便说一下,你可以写((diff = argumentLength - validParameters))。在您编辑后

编辑:发现的Bug
有一个=

argumentLength==$((argumentLength - 1)) 

argumentLength=$((argumentLength - 1)) 

((argumentLength--)) 

,而不是太多。

+1

使用'--'是非标准的,所以可能不适用于其他shell。最简短的写法是'argumentLength = $(($ {#1} - 1))''。 –

+1

@TomFenech我不认为提问者关心可移植性。他将问题标记为bash,并使用'[['也不便携。 – Socowi

+0

尽管如此,在使用便携式语法或至少指定不是的事情时也没有什么坏处,所以当有人盲目地复制你的代码并且它不能在他们的系统上工作时,他们知道为什么。 –