price="1.11"
case $price in
''|*[!0-9]*) echo "It is not an integer.";
;;
esac
Output: It is not an integer
。bash只允许带小数点的正整数或正整数
上述代码只能验证正整数。
如何允许带小数点的正整数?已通过互联网搜索无果
price="1.11"
case $price in
''|*[!0-9]*) echo "It is not an integer.";
;;
esac
Output: It is not an integer
。bash只允许带小数点的正整数或正整数
上述代码只能验证正整数。
如何允许带小数点的正整数?已通过互联网搜索无果
在POSIX兼容的方式这样做是棘手的;您当前的模式匹配非-整数。两个bash
扩展使这相当容易:
使用扩展模式
shopt -s extglob
case $price in
# +([0-9]) - match one or more integer digits
# ?(.+([0-9])) - match an optional dot followed by zero or more digits
+([0-9]))?(.*([0-9]))) echo "It is an integer" ;;
*) echo "Not an integer"
esac
使用正则表达式
if [[ $price =~ ^[0-9]+(.?[0-9]*)$ ]]; then
echo "It is an integer"
else
echo "Not an integer"
fi
(从理论上讲,你应该能够使用POSIX命令expr
也进行正则表达式匹配;我有麻烦开始它可以工作,并且您没有将POSIX兼容性指定为需求,所以我不会担心它。 POSIX模式匹配是没有强大到足以匹配的数字任意长字符串)
如果你只想匹配“十进制化”的整数,而不是任意的浮点值,它当然是简单的:
+([0-9])?(.)
[0-9]+\.?
的'!'实际上意味着它是*不*的整数。 – chepner
可能复制http://stackoverflow.com/questions/41970586/regex-start-of-string-anchor-not-working –
的当你说“带小数点的整数”,你的意思是后面可以跟一个完整的整数停止,还是你的意思是“浮点数”? – tripleee