web-dev-qa-db-ja.com

bash / Makefileの二重ドル記号の意味は何ですか?

Makefile内にシェルスクリプトを挿入する場合、変数を参照するためにダブルドル記号($$)を使用する必要があります(?)。どうしてこんなことに?

for number in 1 2 3 4 ; do \
    echo $$number ; \
done
26
JohnTortugo

gnu make official doc に従って:

レシピ内の変数と関数の参照は、makefileの他の場所での参照と同じ構文とセマンティクスを持っています。また、同じ引用規則があります。レシピにドル記号を表示するには、2倍にする必要があります( ‘$$’)。ドル記号を使用して変数を導入するデフォルトのシェルのようなシェルの場合、参照する変数がmake変数(1つのドル記号を使用)かShell変数(2つのドル記号を使用)かを覚えておくことが重要です。 )。

要するに:

  • makefile変数=>単一のドル記号を使用
  • シェル変数=> 2つのドル記号を使用する
40
anubhava

この例には直接適用できません-表示されているコードがルールではなく$(Shell ...)を介して実行される場合を除きます。

2次拡張が有効になっていると、前提条件リストにある2番目の処理フェーズでmakeが2倍のドル自体を解釈する場合もあります。 (第1フェーズ:ファイルの読み取り、変数の設定、第2フェーズ:依存関係ターゲットの検索と呼び出し、ルールの実行)

これは、ターゲット名を持つ変数が後でファイルでのみ使用できる場合に、依存関係ターゲットを動的に指定できるようにするために使用されます。

https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html を参照してください。

0
phi1010