Linux

我的 expr 正在列印但未評估

  • September 25, 2019

腳本的程式碼是:

echo "Years:"
read age
x=`expr $age*365`
echo -e $x

我從命令行呼叫此腳本時的輸出如下:

Years: 

(假設我放了 20 個)

20*365

為什麼不評價?

我們應該轉義特殊字元*並在值和運算符之間保留空格。

試試看,

x=`expr $age \* 365`

expr這些天已經過時並且基本上已經過時了。與以下更好的替代品相比,它的使用也非常有限且笨拙:

  1. 如今,bash內置了僅整數運算。
$ age=20
$ echo "$((age * 365))"
7300

$ x=$((age*365))
$ echo "$x"
7300
  1. 用於bc浮點運算:
$ age=20
$ echo "$age * 365.25" | bc
7305.00

或者,如果要刪除小數部分:

$ echo "scale=0; $age * 365.25/1" | bc
7305

需要除以 1,因為加法、減法和乘法忽略了中的scale設置bc。這是一個長期存在的煩惱,不太可能被“修復”。 3. 如果您更喜歡 RPN,您可以使用dc

$ age=20
$ dc -e "$age 365.25 * p" 
7305.00

注意:反引號也已過時且已棄用。使用$(...)而不是反引號。例如

x=$(echo "$age * 365.25" | bc)

x=$(dc -e "$age 365.25 * p")

引用自:https://unix.stackexchange.com/questions/543507