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"
私は試しnano
てNotepad++
(行末を選択して「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
動作するようにスクリプトに追加されました。明らかに構文は+(
...すでに「拡張されたワイルドカード」に属しています。