在《Shell declare命令》一節中,我們已經講解了 declare 命令的各種選項,為了讓 Shell 進行整數運算,本節我們重點講解
-i
選項。
預設情況下,Shell 中每一個變數的值都是字串(不了解的讀者請猛擊《Shell變數》),即使你給變數賦值一個數位,它其實也是字串,所以在進行數學計算時會出錯。
使用 declare 命令的
-i
選項可以將一個變數宣告為整數型別,這樣在進行數學計算時就不會作為字串處理了,請看下面的例子:
#!/bin/bash
declare -i m n ret
m=10
n=30
ret=$m+$n
echo $ret
ret=$n/$m
echo $ret
執行結果:
40
3
除了將 m、n 定義為整數,還必須將 ret 定義為整數,如果不這樣做,在執行
ret=$m+$n
和
ret=$n/$m
時,Shell 依然會將 m、n 視為字串。
此外,你也不能寫類似
echo $m+$n
這樣的語句,這種情況下 m、n 也會被視為字串。
總之,除了將參與運算的變數定義為整數,還得將承載結果的變數定義為整數,而且只能用整數型別的變數來承載運算結果,不能直接使用 echo 輸出。
和 (())、let、$[] 不同,
declare -i
的功能非常有限,僅支援最基本的數學運算(加減乘除和取餘),不支援邏輯運算(比較運算、與運算、或運算、非運算),所以在實際開發中很少使用。