bash - 匹配 master 和 release 的正确正则表达式是什么?
问题描述
我必须根据分支名称使用不同的键。如果分支名称以 release/master 开头,则需要使用 prod 键。但是这个正则表达式似乎在这个 shell 脚本中不起作用。
echo copying firebase keys based on the branch name
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
mkdir firebase
chmod 777 firebase
release="^(master$|release\/\S+)"
if [[ $branch == $release ]];
then cp $(pwd)/firebase_keys/prod/* $(pwd)/firebase;
echo "prod firebase keys used"
else cp $(pwd)/firebase_keys/dev/* $(pwd)/firebase;
echo "dev firebase keys used"
fi
解决方案
不使用 Bashisms:
if [ -n "$branch" ] && ! {
[ "$branch" = "${branch#master}" ] &&
[ "$branch" = "${branch#release}" ]
}
then
cp -- "$PWD/firebase_keys/prod/"* "$PWD/firebase"
echo "prod firebase keys used"
else
cp -- "$PWD/firebase_keys/dev/"* "$PWD/firebase"
echo "dev firebase keys used"
fi
这个怎么运作:
"${branch#master}"
master
从branch
变量中删除前导词。
假设分支是masterpiece
:
"${branch#master}"
master
将从masterpiece
→中删除前导piece
比较将[ "$branch" = "${branch#master}" ]
转换为[ "masterpiece" = "piece" ]
哪个是错误的,因此它确认以 .masterpiece
开头master
。
所以:
[ -n "$branch" ]
: 如果分支名称不为空&& !
: 并不是{
: 为 NOT 条件语句打开分组[ "$branch" = "${branch#master}" ]
: 分支名称不以 . 开头master
。&&
: 和[ "$branch" = "${branch#release}" ]
: 分支名称不以 . 开头release
。}
: 关闭语句组
推荐阅读
- computer-vision - 如何制作用于手部检测的haar级联分类器
- c# - 如何判断一个 MS-Word 段落是否超过一行?
- python - 有没有办法将一组python文件转换为exe?
- spring - 具有 Java 继承的 @RequestScope 注释行为
- c++ - C++ 动态迭代地图
- c++ - 是否有一种简单有效的方法将 bool [8] 的值分配给 std::uint8_t
- java - Java 文件中表达式的非法开始
- jquery - Simplelightbox 不适用于 jQuery 3.4.1
- javascript - 无法将对象数组传递给函数?
- concatenation - VHDL 操作数在综合期间具有不同的长度错误