Shell declare -i:將變數宣告為整數

2020-07-16 10:04:45
在《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+$nret=$n/$m時,Shell 依然會將 m、n 視為字串。

此外,你也不能寫類似echo $m+$n這樣的語句,這種情況下 m、n 也會被視為字串。

總之,除了將參與運算的變數定義為整數,還得將承載結果的變數定義為整數,而且只能用整數型別的變數來承載運算結果,不能直接使用 echo 輸出。

和 (())、let、$[] 不同,declare -i的功能非常有限,僅支援最基本的數學運算(加減乘除和取餘),不支援邏輯運算(比較運算、與運算、或運算、非運算),所以在實際開發中很少使用。