Dig*_*uma 19
只要你使用bash版本> = 3就可以使用正则表达式:
[[ $a =~ ^-?[0-9]+$ ]] && echo integer
Run Code Online (Sandbox Code Playgroud)
虽然这个bash FAQ提到了各种bash 3.x中bash正则表达式实现的不一致性(如果引用或不引用正则表达式),我认为在这种情况下,没有任何字符需要引用任何版本,所以我们是安全的.至少它对我有用:
$ a="" $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer $ a=" " $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer $ a="a" $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer $ a='hello world!' $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer $ a='hello world 42!' $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer $ a="42" $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer integer $ a="42.1" $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer $ a="-42" $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer integer $ a="two" $ [[ $a =~ ^-?[0-9]+$ ]] && echo integer
我需要一些只对正整数返回 true (对空字符串返回 true )的东西。我决定这样做:
test -n "$1" -a "$1" -ge 0 2>/dev/null
之所以2>/dev/null存在,是因为如果输入(至 -ge)未解析为整数,则测试会打印错误(并返回 2)
我希望它可以更短,但“测试”似乎没有“安静”选项,并将“”视为有效整数(零)。
小智 5
function is_int() { return $(test "$@" -eq "$@" > /dev/null 2>&1); }
input=0.3
input="a b c"
input=" 3 "
if $(is_int "${input}");
then
echo "Integer: $[${input}]"
else
echo "Not an integer: ${input}"
fi
Run Code Online (Sandbox Code Playgroud)
echo your_variable_here | grep "^-\?[0-9]*$"如果变量是整数,则返回该变量,否则不返回任何内容。
| 归档时间: |
|
| 查看次数: |
52077 次 |
| 最近记录: |