2012-10-04 65 views
1

想象一下,我使用的狀態文件來存儲一個數字,我讀到這樣的數字:atoi()函數在bash中嗎?

COUNT=$(< /tmp/state_file)

但由於該文件可能被打亂,$ COUNT可能不包含一個「數字」,但任何字符。

除了使用正則表達式,即if [[ $COUNT ~ ^[0-9]+$ ]]; then blabla; fi,是否有一個「atoi」函數將其轉換爲數字(如果無效,則爲0)?

編輯

最後我決定用這樣的:

let a=$(($a+0))

或者

declare -i a; a="abcd123"; echo $a # got 0

由於J20的提示。

回答

2

您不需要atoi等效,Bash變量是無類型的。試圖在算術中使用設置爲隨機字符的變量將會默默地忽略它們。例如

foo1=1 
foo2=bar 
let foo3=foo1+foo2 
echo $foo3 

給出結果1

this reference

0

echo $COUNT | bc應該能投一些,容易出錯按jurgemaister的評論...

echo ${COUNT/[a-Z]*} | bc這類似於你的正則表達式的方法,但不容易出錯。

+0

'echo「1a2」| bc'產生'(standard_in)1:解析錯誤' – jurgemaister

+0

謝謝..編輯答案。 – loxxy