2017-03-16 5 views
0

Makefileでファイルを1行ずつ読み込む必要があります。 次のトリガーセグメンテーション違反:bashをMakefileに使用すると、奇妙なsegfaultが発生する

all: 
    @cat myFile.txt | while read -r line; do echo $$(line); done 

不思議なことに、次の作品(ファイルの内容を印刷する):

all: 
    @cat myFile.txt | while read -r line; do echo $$line; done 

問題の原因の任意のアイデア?

+0

シェル変数は、 '$ {line}'の中かっこで囲むことができます。 make変数は '$ {line}'や '$(line)'の中かっこで囲むことができます。 –

答えて

3

まあ、$(line)(すなわち、Makeによってエスケープされていないコード)は、あなたが期待したことをするつもりはありません。これはcommand substitutionであり、リテラルコマンドlineを実行します。これはシステム上のコマンドでも、そうでなくてもかまいません。

一般に、エスケープ文字を必要とするもの、またはシェルスクリプト内に複数の行として記述されるものは、シェルスクリプト内にあるはずです。あなたは自分の頭痛をそのように救うでしょう。

関連する問題