bash - bash 测试 - 匹配正斜杠
问题描述
我有一个 git 分支名称:
current_branch='oleg/feature/1535693040'
我想测试分支名称是否包含/feature/,所以我使用:
if [ "$current_branch" != */feature/* ] ; then
echo "Current branch does not seem to be a feature branch by name, please check, and use --force to override.";
exit 1;
fi
但是那个分支名称与正则表达式不匹配,所以我以 1 退出,有人知道为什么吗?
解决方案
[ ]
是单括号test(1)
命令,它不像 bash 那样处理模式。而是使用双括号bash 条件表达式 [[ ]]
。例子:
$ current_branch='oleg/feature/1535693040'
$ [ "$current_branch" = '*/feature/*' ] && echo yes
$ [[ $current_branch = */feature/* ]] && echo yes
yes
用正则表达式编辑:
$ [[ $current_branch =~ /feature/ ]] && echo yes
yes
正则表达式可以匹配任何地方,因此您不需要前导和尾随*
(这将.*
在正则表达式中)。
注意:这里的斜杠不是正则表达式的分隔符,而是要匹配字符串中某处的文字。例如,[[ foo/bar =~ / ]]
返回 true。这与许多语言中的正则表达式表示法不同。
推荐阅读
- amazon-web-services - lambda - 用户无权执行:cognito-idp:ListUsers
- postgresql - PostgreSQL。修改表的函数的独占权限
- kubernetes - Kubernetes 仪表板服务器上的错误(“未知”)导致请求无法成功
- javascript - 禁用和启用注释字段取决于注释字段值是否为空
- laravel - 在 laravel 中选择最低价格与关系
- c++ - 使用二进制数据点生成 XML VTK 文件
- python - 尝试用 Python 编写高质量的 selenium 脚本
- docker - 如何在生产中使用 docker-compose 中的环境变量?
- html - Bootstrap cards aligned vertically not responsive
- python - 具有不同实现但返回相同值的两个函数的测试用例