检查变量是否为UNIX shell中的数字

22 unix shell

如何在UNIX shell中检查变量是否为数字或包含数字?

Ada*_*eld 22

if echo $var | egrep -q '^[0-9]+$'; then
    # $var is a number
else
    # $var is not a number
fi
Run Code Online (Sandbox Code Playgroud)


Pio*_*cki 17

Shell变量没有类型,因此最简单的方法是使用return type test命令:

if [ $var -eq $var 2> /dev/null ]; then ...
Run Code Online (Sandbox Code Playgroud)

(或者用正则表达式解析它)

  • 如果var为空,则会出现误报.也许:`if [-n"$ var"-a $ var -eq $ var 2>/dev/null]; 然后echo是num; 否则不是一个数字; fi` (2认同)

Jen*_*ens 14

没有叉子,没有管道.纯POSIX外壳:

case $var in
   (*[!0-9]*|'') echo not a number;;
   (*)           echo a number;;
esac
Run Code Online (Sandbox Code Playgroud)

(假设数字:=一串数字).如果你要允许有一个领先的正负号-+为好,剥离这样的可选符号:

case ${var#[-+]} in
   (*[!0-9]*|'') echo not a number;;
   (*)           echo a number;;
esac
Run Code Online (Sandbox Code Playgroud)


Dar*_*ron 5

在启用了 extglob 选项的 ksh93 或 bash 中:

if [[ $var == +([0-9]) ]]; then ...
Run Code Online (Sandbox Code Playgroud)