2017-03-16 4 views
0

Makefile에서 한 줄씩 파일을 읽어야합니다. 다음 트리거 segfault의 :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을 실행하며 시스템에서 명령 일 수도 있고 그렇지 않을 수도 있습니다.

일반적으로 쉘 스크립트에서 이스케이프 문자가 필요하거나 둘 이상의 줄로 작성된 것은 쉘 스크립트에 있어야합니다. 그렇게하면 두통을 덜어 줄 것입니다.