为了账号安全,请及时绑定邮箱和手机立即绑定

测试string是否为有效整数

测试string是否为有效整数

函数式编程 2019-09-02 08:40:13
我正在尝试做一些常见的事情:在shell脚本中解析用户输入。如果用户提供了有效的整数,则脚本会执行一项操作,如果无效,则执行其他操作。麻烦的是,我还没有找到一种简单(而且相当优雅)的方式 - 我不想用char来区分char。我知道这一定很容易,但我不知道如何。我可以用十几种语言来做,但不是BASH!在我的研究中,我发现了这个:正则表达式,用于测试字符串是否包含基数为10的有效实数其中有一个关于正则表达式的答案,但据我所知,这是C(以及其他)中可用的函数。尽管如此,它看起来像是一个很好的答案,所以我用grep尝试了它,但是grep不知道该怎么做。我试过-P在我的盒子上意味着把它当作PERL regexp - nada。Dash E(-E)也没有用。并且-F都没有。为了清楚起见,我正在尝试这样的东西,寻找任何输出 - 从那里,我将破解脚本以利用我得到的任何东西。(IOW,我期待一个不合格的输入在有效行重复时不返回任何内容。)snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")if [ -z "$snafu" ] ;then   echo "Not an integer - nothing back from the grep"else   echo "Integer."fi有人请说明这是最容易做到的吗?坦率地说,在我看来,这是TEST的缩影。它应该有这样的旗帜if [ -I "string" ] ;then   echo "String is a valid integer."else   echo "String is not a valid integer."fi
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这里的聚会迟到了。我非常惊讶,没有一个答案提到最简单,最快,最便携的解决方案; 该case声明。


case ${variable#[-+]} in

  *[!0-9]* | '') echo Not a number ;;

  * ) echo Valid number ;;

esac

在比较之前修剪任何符号感觉有点像黑客,但这使得case语句的表达式变得更加简单。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 504 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信