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.人物?
您可以使用以下命令指定字符串长度至少为 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)的任何字符串
编辑:虽然肯特在这里的解决方案更加优雅:)
我不会用正则表达式来做.
HEX="301DE8"
(( 16#$HEX ))
Run Code Online (Sandbox Code Playgroud)
然后你检查最后一个语句的返回码$?.
如果是0,你的HEX是好的,否则,它不是十六进制数.
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |