首页 > 解决方案 > 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。嘘

我究竟做错了什么?提前致谢!

标签: bashshellzsh

解决方案


我注意到感谢@choroba 对我运行脚本的问题的评论,sh而不是bash. 这导致脚本dash在 Ubuntu 上运行并失败,因为它使用了其他 shell 中不可用的 bash 功能。


推荐阅读