>想象一下,我使用状态文件来存储一个数字,我像这样读取数字:
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 的提示。
你不需要atoi
等价物,Bash 变量是非类型的。尝试使用在算术中设置为随机字符的变量只会默默地忽略它们。例如
foo1=1
foo2=bar
let foo3=foo1+foo2
echo $foo3
给出结果1
。
请参阅此参考
echo $COUNT | bc
应该能够投出一个数字,根据 jurgemaister 的评论容易出错......
echo ${COUNT/[a-Z]*} | bc
类似于您的正则表达式方法,但不容易出错。
case "$c" in
[0-9])...
你应该按字符方式吃掉输入字符串。