bash - Bash:«语法错误:“(”意外(期待“then”)»和«1:eval:语法错误:“(”意外»
问题描述
我有一个用于在提交时自动更新项目版本的 shell 脚本,该脚本在 zsh(在 macOS Catalina 上)上运行良好,而在 bash(在 Ubuntu 20.04 上)上运行良好。
运行脚本时,我收到以下错误:
Syntax error: "(" unexpected (expecting "then")
在以下行:
if [[ $commit_title =~ (into )([A-Za-z0-9-]+) ]]
then
merge_branch=${BASH_REMATCH[2]}
else
merge_branch=$main_branch
fi
如果我删除使用 bash rematch 的代码块,我会收到以下错误:
1: eval: Syntax error: "(" unexpected
我在多个地方使用 eval,例如:
if eval '[[ $current_branch =~ '"^($git_flow_from)$"' ]]' && eval '[[ $merge_branch =~ '"^($git_flow_to)$"' ]]'
then
echo 'Skipping version update for this merge...'
exit 0
fi
您可以在此处查看整个脚本的上下文(我没有将其包含在问题中,因为它有点长):https://github.com/celiavelmar/conventional-pre-commits/blob/master/scripts/update_version。嘘
我究竟做错了什么?提前致谢!
解决方案
我注意到感谢@choroba 对我运行脚本的问题的评论,sh
而不是bash
. 这导致脚本dash
在 Ubuntu 上运行并失败,因为它使用了其他 shell 中不可用的 bash 功能。
推荐阅读
- java - Eclipse 显示视图不会显示
- c++ - 关于 C++ 中声明和定义之间区别的混淆
- git - Jenkins git clone 间歇性失败
- react-native - 删除“填充”时“视图”消失
- hive - com.tableausoftware.jdbc.TableauJDBCException:读取准备好的查询的元数据时出错
- mysql - 如何使用 Angular 从两个表中获取数据并在 HTML 中显示它们?
- json - 在 deluge 脚本中访问多个 JSON 对象
- javascript - 如何从浏览器获取基本身份验证信息
- django - 在 django 应用程序的 Docker 容器中处理 RACE CONDITION,包括 postgres、nginx、celery、redis、elasticsearch
- typescript - Angular 6:mat-cell 上的调用函数