Bash how to check if a string is a number(can be negative)
我想检查某个字符串是否是数字,我尝试了以下方法:
1 2
| if ${string} == *[!0-9]*
else echo its a number |
但当我有一个负数时,它说它不是一个数字,我希望它也适用于负数。
- 不,它不适用于负数
- 在这个问题中,你可以找到一些考虑到负数的答案。
- @SEFI,这里接受的答案在其评论中有一个负数的解决方案;我已经将其编辑成了正确的答案。
- @Charlesduffy非常感谢,但是当我有这样一个数字时,它说它不是数字而不是-7
- @sefi,---7不是数字,逻辑是正确的。如果你想要零个或更多的-符号,你可以用-*代替-?。顺便说一下,另一个答案中的评论也讨论了这个问题。:)
- @sefi,…或者更确切地说,---7只是一个数字,而1+2是一个数字;它是一元运算,应用于-7两次,每次翻转一次,就像1+2是应用于两个数字的二进制运算一样。
试试这个脚本
1 2 3 4 5 6 7 8 9
| #!/bin/bash
string=$1
if [["$string" =~ ^(-)?[0-9]+$ ]]; then
echo 'Number'
else
echo 'Not number'
fi |
这只适用于整数。
如果要匹配十进制数,请使用此测试
1
| "$string" =~ ^-?[0-9]+(\.[0-9]+)?$ |
- +我觉得你在这里贴的东西很恶心
- 非常感谢,但当我有这样的数字时,它说它不是数字。
- @SEFI在数字之前应该只有一个负号。如果您想要一个以上的负签名,那么替换(-)。与(-)*
- 谢谢!完美工作!
- @SEFI没问题
- 在十进制形式中,您应该将*替换为?,否则您还将匹配输入,如1.2.3。(顺便说一句:我假设您使用(-)?而不仅仅是-?来提高可读性。)
- @我的错误胜过你。