MSYS2: コマンド この端末では正常に動作しますが、スクリプトに構文エラー "(") があります。

MSYS2: コマンド この端末では正常に動作しますが、スクリプトに構文エラー "(") があります。

Windowsでは、MSYS2を使用して実行可能ファイルのファイル拡張子を出力に追加します(which存在する場合)。次の行は次のとおりです。

locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"

これは私のコンピュータでうまく機能し、印刷されます。

/mingw64/bin/mingw32-make
/mingw64/bin/mingw32-make.exe

しかし、今スクリプト(one-liner.sh)に同じ行を入れました。

#/bin/bash
locAlt="$(which "mingw32-make")" ; echo "$locAlt" ; locAlt=("$locAlt"+(|.*)) ; echo "$locAlt"

私は試しnanoNotepad++(行末を選択して「UNIX(LF)」に設定できます)、上記のファイルを表示するcat -v one-liner.sh出力を確認しました(いいえ^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動作するようにスクリプトに追加されました。明らかに構文は+(...すでに「拡張されたワイルドカード」に属しています。

関連情報