Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在Bash中测试变量是否为指定格式?_Regex_Bash - Fatal编程技术网

Regex 如何在Bash中测试变量是否为指定格式?

Regex 如何在Bash中测试变量是否为指定格式?,regex,bash,Regex,Bash,我的Bash脚本接受一个版本号的参数,格式如下:.\35;.\ 35;.\ 35;.dev或.\35;.\ 35;.prod,其中.可以是任何数字,例如:3.6.212.0.dev 我想验证参数的格式是否正确(包含由点分隔的所有4个数字,并在最后包括.prod或.dev) 我不确定如何实现这一点,到目前为止,我已经尝试过: re='^[0-9]+$' if ! [[ $1 =~ $re ]] ; then echo "error: Incorrect version specified

我的Bash脚本接受一个版本号的参数,格式如下:
.\35;.\ 35;.\ 35;.dev
.\35;.\ 35;.prod
,其中
.
可以是任何数字,例如:
3.6.212.0.dev

我想验证参数的格式是否正确(包含由点分隔的所有4个数字,并在最后包括
.prod
.dev

我不确定如何实现这一点,到目前为止,我已经尝试过:

re='^[0-9]+$'
if ! [[ $1 =~ $re ]] ; then
echo "error: Incorrect version specified; must be in the format of #.#.#.#.env" >&2; exit 1
fi
你可以用

re='^([0-9]+\){4}(开发产品)$'
如果![[“$1”=~$re]];然后
echo“错误:指定的版本不正确;格式必须为#.#.#.#.env”>&2;出口1
fi
见a

^([0-9]+\){4}(dev | prod)$
是符合POSIX ERE的模式,它匹配:

  • ^
    -字符串的开头
  • ([0-9]+\){4}
    -一个或多个数字和一个点出现四次
  • (dev | prod)
    -
    dev
    prod
    子字符串
  • $
    -字符串结束

谢谢!你解释正则表达式每个部分的部分对像我这样的新手真的很有帮助!