如何在POSIX shell脚本中检查变量是否为整数(避免周围有空格问题)?

LinuxSecurityFreak

is_integer ()很长时间以来,我的POSIX函数都是这样的:

#!/bin/sh
is_integer ()
{
    [ "$1" -eq "$1" ] 2> /dev/null
}

但是,今天,我发现它坏了如果数字周围有空格,则它的值也会令人惊讶地达到true,而我不知道该如何解决。


正确(预期)行为的示例:

is_integer 123评估为true

错误(意外)行为的示例:

is_integer ' 123'也计算为true,但是显然包含一个前导空格,因此false在这种情况下该函数预计将进行计算


请仅提供符合POSIX的建议。谢谢你。

伊卡洛斯
#!/bin/sh
is_integer ()
{
    case "${1#[+-]}" in
        (*[!0123456789]*) return 1 ;;
        ('')              return 1 ;;
        (*)               return 0 ;;
    esac
}

仅使用POSIX内置函数。从规范中不清楚是否+1应该为整数,如果不是,+则从case行中删除

它的工作原理如下。${1#[+-]}删除可选的前导符号。如果剩下的东西包含非数字,则它不是整数,同样,如果什么都没有。如果不是整数,则为整数。

编辑:将^更改为!否定字符类-谢谢@LinuxSecurityFreak

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查变量是否为null或空字符串或JavaScript中的所有空格?

如何在Posix Shell脚本中导出环境变量?

Shell脚本如何在变量中传递带有空格的参数

如何在POSIX Shell脚本中创建算术循环?

如何在POSIX Shell脚本中使用伪数组?

如何在 Posix shell 脚本中将变量设置为无限循环的输出?

需要如何在POSIX Shell中重复字符的说明

如何在C中将GCD代码重写为POSIX

如何在POSIX函数send()中关闭TCP PSH标志?

如何在POSIX sh字符串中替换“ /”

如何在JavaScript中检查变量是否为整数?

如何在POSIX上找出我的shell脚本中有多少个CPU线程?

如何在 Linux POSIX shell 脚本中捕获 CTRL+Z;可能与否?

如何在shell脚本中的变量周围加引号

如何在POSIX shell中执行带有未知数量参数的命令?

Shell脚本:如何检查变量是否为null或否

如何检查PHP中是否有多个空格或开头有空格

如何在(POSIX)shell变量中正确存储换行符?

如何在JavaScript for Automation中获取当前脚本文件夹的POSIX路径?

如何检查一个句子是否是一个带有空格的问题?

如何在POSIX上计算字符串变量中的行数?

如何在Linux中使用POSIX pthreads将整数从文件写入缓冲区?

语言环境如何在Linux / POSIX中工作,并且应用了哪些转换?

如何在C中的分叉进程上使用POSIX信号量?

如何在PostgreSQL中创建通用正则表达式(POSIX)?

如何在一个POSIX线程中结合两种不同的等待机制?

如何在POSIX正则表达式中编写负前瞻

如何在shell脚本中检查字符串是否为空?

如何在Shell脚本中检查OpenSSL版本是否为-ge 1.1.1?