2012-10-04 39 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