检查shell脚本中的数字是否为十六进制而不指定字符数限制[bash]

Aru*_*ese 1 unix linux bash shell

我想检查shell脚本中的数字是否为十六进制.我已经尝试了以下代码来检查范围0-9A-Fa-f.

即,如果HEX ="301D"[4个字符],则以下代码将起作用.我的目标是消除检查中字符数的依赖性.

 #!/bin/bash

    HEX="301DE8"

    #if ! [[ $HEX =~ ^[[:xdigit:]]{10}$ ]] ; then
    #if ! [[ $HEX =~ ^[0-9A-Fa-f]{10}$ ]] ; then
    #if ! [[ $HEX =~ ^[0-9A-Fa-f]$ ]] ; then
    if ! [[ $HEX =~ ^[0-9A-Fa-f]{4}$ ]] ; then
        echo "string is not hex"
    else
        echo "string contains hex digits"
    fi
Run Code Online (Sandbox Code Playgroud)

我试过增加限制并删除限制.但两者都没有用.我正在考虑使用while循环来检查每个字符作为最后一个选项.是否有更好的方法来实现检查而不指定no.人物?

Jir*_*nta 5

您可以使用以下命令指定字符串长度至少为 1 个字符{1,}:

HEX="301DE8"

if ! [[ $HEX =~ ^[0-9A-Fa-f]{1,}$ ]] ; then
    echo "string is not hex"
else
    echo "string contains hex digits"
fi
Run Code Online (Sandbox Code Playgroud)

这将匹配至少包含 1 个指定字符 ( 0-9A-Fa-f)的任何字符串

编辑:虽然肯特在这里的解决方案更加优雅:)


Ken*_*ent 5

我不会用正则表达式来做.

HEX="301DE8"
(( 16#$HEX ))
Run Code Online (Sandbox Code Playgroud)

然后你检查最后一个语句的返回码$?.

如果是0,你的HEX是好的,否则,它不是十六进制数.