最佳答案
我正在尝试做一些足够常见的事情: 解析 shell 脚本中的用户输入。如果用户提供了一个有效的整数,则脚本执行一件事情,如果无效,则执行其他事情。问题是,我还没有找到一种简单(而且相当优雅)的方法来做这件事——我不想一个字符一个字符地把它拆开。
我知道这很容易,但我不知道怎么做。我可以用十几种语言来做,但是不能用 BASH!
在我的研究中,我发现:
这里有一个关于正则表达式的答案,但是据我所知,这是 C 语言中的一个函数。尽管如此,它还是有一个看起来不错的答案,所以我用 grep 尝试了一下,但 grep 不知道该怎么处理它。我尝试了 -P,它在我的盒子上的意思是把它当作一个 PERL regexp-nada。破折号 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
有人能解释一下这是怎么做到的吗?
坦率地说,这是一个测试的缺点,在我看来。它应该有一个这样的旗帜
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi