![MSYS2:命令在终端中工作正常,但脚本中存在语法错误“(”](https://linux22.com/image/209402/MSYS2%EF%BC%9A%E5%91%BD%E4%BB%A4%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E5%B7%A5%E4%BD%9C%E6%AD%A3%E5%B8%B8%EF%BC%8C%E4%BD%86%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%AD%98%E5%9C%A8%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF%E2%80%9C(%E2%80%9D.png)
在 Windows 上,使用 MSYS2,我想将可执行文件的文件扩展名添加回 的输出(which
如果有)。这是一行:
locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"
当在 MSYS2 MinGW 终端中运行时,这在我的机器上运行良好并打印:
/mingw64/bin/mingw32-make
/mingw64/bin/mingw32-make.exe
但是,现在我将同一行放入脚本中 ( one-liner.sh
):
#/bin/bash
locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"
我尝试了nano
and Notepad++
(您可以在其中选择行结尾,并将它们设置为“UNIX (LF)”,并检查 的输出cat -v one-liner.sh
,其中显示了如上所示的文件(no ^M
,如这个问题)。但是,当尝试使用 运行该文件时./one-liner.sh
,我收到错误
./one-liner.sh: line 2: syntax error near unexpected token `('
./one-liner.sh: line 2: `locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"'
为什么会这样呢?
答案1
事实证明,这个答案适用。添加shopt -s extglob
到脚本中即可使其工作。显然,语法+(
......已经属于“扩展通配符”。