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