Bashでは、次のことができます。
for name in sqls/*.{schema,migration}.sql; do
echo $name; # some operation on the file name
done
次のように出力されます。
sqls/0001.schema.sql
sqls/0002.schema.sql
sqls/0003.migration.sql
sqls/0004.schema.sql
sqls/0006.schema.sql
sqls/0007.schema.sql
しかし、同じループをMakefileに入れると、次のようになります。
names:
for name in sqls/*.{schema,migration}.sql; do echo $name; done
出力は次のとおりです。
sqls/*.{schema,migration}.sql
Makefileで同じことをどのように実行できますか?
答え1
あなたが望むもの:
names:
for name in sqls/*.{schema,migration}.sql; do\
echo $${name};\ # some operation on the file name
done
説明したように文書、これはアクセス間の違いです。グヌメイクそして強く打つ変わりやすい。以下は、両方を使用する簡単な例です。
LIST = one two three
all:
for i in $(LIST); do \
echo $$i; \
done
これはi
bash変数LIST
ですが、GNUMake変数です。
要するに、ドル記号を受け取るためにbashが必要な場合は、makefileに$
二重ドル記号を追加してください。$$
({}
またはを使用()
するMakefileまたはbashのそれに対応する項目.)
答え2
{...}はbash構成で、Makefileは通常中括弧拡張機能をサポートしていないshを起動することを認識する必要があります。
しかし、すべてが失われるわけではありません。 GNU Makeを使用している場合は、SHELL := bash
Makefileの上部にこの小さな行を配置してMakeにbashを使用するように指示できます。