Linux 在shell脚本中检查数字是否为十六进制,但不指定字符数限制[bash]
我想检查一个数字在shell脚本中是否为十六进制。我尝试了下面的代码,它检查范围Linux 在shell脚本中检查数字是否为十六进制,但不指定字符数限制[bash],linux,bash,shell,unix,Linux,Bash,Shell,Unix,我想检查一个数字在shell脚本中是否为十六进制。我尝试了下面的代码,它检查范围0-9A-Fa-f i、 e,如果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
i、 e,如果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
我尝试过增加限制和取消限制。但两者都不起作用。我正在考虑使用while循环来检查每个字符,作为最后一个选项。
是否有更好的方法在不指定字符数的情况下执行检查?您可以使用
{1,}
指定字符串长度至少为1个字符:
HEX="301DE8"
if ! [[ $HEX =~ ^[0-9A-Fa-f]{1,}$ ]] ; then
echo "string is not hex"
else
echo "string contains hex digits"
fi
这将匹配至少由1个指定字符组成的任何字符串(0-9A-Fa-f
)
编辑:尽管Kent在这里的解决方案要优雅得多:)您可以使用
{1,}
指定字符串长度至少为1个字符:
HEX="301DE8"
if ! [[ $HEX =~ ^[0-9A-Fa-f]{1,}$ ]] ; then
echo "string is not hex"
else
echo "string contains hex digits"
fi
这将匹配至少由1个指定字符组成的任何字符串(0-9A-Fa-f
)
编辑:虽然肯特的解决方案在这里要优雅得多:)但我不会用正则表达式
HEX="301DE8"
(( 16#$HEX ))
然后通过$?
检查最后一条语句的返回代码
如果它是
0
,那么十六进制就可以了,否则它就不是十六进制数。我不会用正则表达式
HEX="301DE8"
(( 16#$HEX ))
然后通过$?
检查最后一条语句的返回代码
如果它是
0
,则十六进制是正常的,否则它不是十六进制数。是否要检查字符串是否只包含十六进制数字,无论有多少?你在找正则表达式吗?@Benjamin W,是的。但我尝试了下面的选项,但仍然不起作用。如果![[$HEX=~^[[0-9A-Fa-f]]+$];然后是[0-9A-Fa-f]
或[:xdigit:]
(注意[]
的编号)。@benjamin W,对不起。我的错误。[$HEX=~^[0-9A-Fa-f]+$]]对我来说很好。谢谢。[:xdigit:][]
是更安全的选择,顺便说一句,因为不是每个语言环境都有A-F扩展到ABCDEF。是否要检查字符串是否只包含十六进制数字,不管有多少?你在找正则表达式吗?@Benjamin W,是的。但我尝试了下面的选项,但仍然不起作用。如果![[$HEX=~^[[0-9A-Fa-f]]+$];然后是[0-9A-Fa-f]
或[:xdigit:]
(注意[]
的编号)。@benjamin W,对不起。我的错误。[$HEX=~^[0-9A-Fa-f]+$]]对我来说很好。谢谢。[:xdigit:][]
是更安全的选择,顺便说一句,因为不是每个语言环境都有A-F扩展到ABCDEF。这不正确地说HEX='F+!P4
是十六进制,它错误地说hex=0
不是,并且它允许使用hex='1-a[$(ls>&2)]执行任意代码。
@thatotherguy双重引用它?这错误地说hex='F+!P4是十六进制,它错误地说,hex=0
不是,并且它允许使用hex='1-a[$(ls>&2)]执行任意代码。
@thatotherguy双引号引用它?