3

想象一下,我使用一个状态文件来存储一个数字,我这样读取数字:

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 的提示。

4

3 回答 3

4

您不需要atoi等效的 Bash 变量是无类型的。尝试在算术中使用设置为随机字符的变量只会默默地忽略它们。例如

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

给出结果1

请参阅此参考

于 2012-10-04T11:59:55.690 回答
0

echo $COUNT | bc应该能够投一个数字,根据法官的评论容易出错......

echo ${COUNT/[a-Z]*} | bc这类似于您的正则表达式方法,但不容易出错。

于 2012-10-04T12:06:01.197 回答
0
case "$c" in
[0-9])...

你应该按字符吃掉输入字符串。

于 2018-03-13T16:21:08.437 回答