Bash:需要整數表達式,使用讀取/測試

Bash:需要整數表達式,使用讀取/測試

我正在學習 shell 程式設計的基礎知識,所以我寫了一些簡單的東西,例如

#!/bin/bash
read var1
read var2
if [ var1 -lt var2 ]; then
    echo "var1 is lt var2"
else
    echo "var2 is lt var1"
fi

我的理解是,變數在 Bash 中是無類型的,並且任何變數如果只包含數字,都可以用作整數。但是當我運行這個時,我收到錯誤“預期的整數表達式”......為什麼?

答案1

declare實際上,您可以使用(或舊的)內建函數在變數上設定一些屬性typesetdeclare -i var1 var2將在這些變數上設定整數屬性。之後,嘗試為這些變數設定非整數值的賦值將引發錯誤。

但你的問題出在文法上。使用變數的值時,必須在其名稱前面加上前綴$

if [ "$var1" -lt "$var2" ]; then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

算術評估是例外,不需要$

if ((var1<var2)); then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

作為警告,在[..內部]始終用雙引號引用變量,以避免單字擴展擾亂表達式的語法。 (我的意思是,您將遇到未設定變數、包含空字串的變數和包含IFS字元的變數的問題。)或者您可以使用更新更好的[[..]]來正確處理此類情況:

if [[ $var1 -lt $var2 ]]; then
    echo "$var1 is lt $var2"
else
    echo "$var2 is lt $var1"
fi

答案2

您應該在名稱前面引用變數$

if [ $var1 -lt $var2 ] ; then...

相關內容