特定のプレフィックス(たとえばexclude_
)で始まらない特定のフォルダー内のすべてのファイルに対して操作を行いたい。for
次のような拡張グロブを持つbash ループがあります。
for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done
コマンドラインでは、これは正常に機能します。
$ for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done
foo/bar/apple
foo/bar/pear
foo/bar/banana
ただし、メイクファイルで使用する場合:
target:
for FILE in foo/bar/!(exclude_*) ; do echo $$FILE ; done
次のエラーが表示されます。
$ make
for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `for FILE in foo/bar/!(exclude_*) ; do echo $FILE ; done'
逃した必要なエスケープがありますか?
.SHELLFLAGS
で私にとってはうまくいきませんでしたが、フラグを直接入れるとSHELL=/bin/bash -O extglob -c
うまくいきました。なぜアイデアがありますか?