regex - 如何在 Bash 中测试变量是否符合指定格式?

标签 regex bash

我的 Bash 脚本接受版本号参数,格式如下:#.#.#.#.dev#.#.#.#.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}(dev|prod)$'
if ! [[ "$1" =~ $re ]] ; then
  echo "error: Incorrect version specified; must be in the format of #.#.#.#.env" >&2; exit 1
fi

查看Bash demo online .

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

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

关于regex - 如何在 Bash 中测试变量是否符合指定格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66924239/

相关文章:

linux - 如何通过 shell 脚本向提示符提供输入值?

ruby - 使用 gsub 或 sub 替换一个字符

数据库 vs 平面文件,对于 "regex"匹配许多同时请求,这是一种更快的结构

c# - 使用 .NET RegEx 在第二个 '-' 之后检索字符串的一部分

java - 生成终端读取其标准输入

bash - 使用不同的选项标志多次执行 Python 脚本

javascript - 我需要提取字符串中数字的前 6 位和后 4 位数字,并使用正则表达式删除前导零

javascript - 我的自定义范围脚本的 RegExp 问题

linux - Shell Script-每个独特的用户

python - 将多个 ip 地址的列表解析为单个变量