인라인 for 루프 명령의 줄 바꿈으로 공백

인라인 for 루프 명령의 줄 바꿈으로 공백

첫 번째 명령의 공백이 개행 문자로 해석되는 이유를 알려주는 사람이 있나요? 에코 대신 인쇄가 사용되는 경우도 있습니다.

$for l in $( find *.txt -exec head -1 {} \; ); echo $l;
2011년 9월 16일
09:20
2011년 9월 19일
18.41
2011년 9월 21일
07:15
$find *.txt -exec head -1 {} \;
9.16.11 09:20
9.19.11 18.41
9.21.11 07:15

답변1

명령 대체는 IFS에 따라 출력을 토큰화합니다. 특히 이 경우에는 공간적으로 분할됩니다. 구문 분석되지 않은 출력 find. 대신 다음을 수행하세요.

for file in *.txt; do
    head -1 "${file}"
done

Wooledge 위키에도 이 주제에 대한 좋은 정보가 있습니다.여기.

답변2

특히 IFS 전역 변수에 대해서는 쉘의 매뉴얼 페이지를 확인하십시오.

구체적으로 다음을 수행하십시오.

IFS=$(echo -en "\t\n\0")

관련 정보