MSYS2:命令在终端中工作正常,但脚本中存在语法错误“(”

MSYS2:命令在终端中工作正常,但脚本中存在语法错误“(”

在 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"

我尝试了nanoand 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到脚本中即可使其工作。显然,语法+(......已经属于“扩展通配符”。

相关内容