2017-08-25 28 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

儘管如此,在使用便攜式語法或至少指定不是的事情時也沒有什麼壞處,所以當有人盲目地複製你的代碼並且它不能在他們的系統上工作時,他們知道爲什麼。 –