"for 루프"에서 IFS 사용

"for 루프"에서 IFS 사용
lis="a:b:c:d:"

IFS=:

다음 코드를 실행하면,

for i in "a:b:c:d:";
do 
    echo the output is $i
done

나는 얻다:

the output is a b c d

대신 "a:b:c:d:"를 $lis로 바꾸는 경우:

for i in $lis;
do 
    echo the output is $i
done

예상되는 결과가 있습니다.

the output is a
the output is b
the output is c
the output is d

무엇이 잘못되었는지 궁금합니다. $lis는 기본적으로 "a:b:c:d"와 동일합니다.

답변1

가장 큰 차이점은 단어 분할이 수행되는 위치입니다. 큰따옴표는 리터럴 문자열이나 인용된 변수가 "$lis"단일 항목으로 처리되도록 보장합니다.

for i in "a:b:c:d:";
do 
    echo the output is $i
done

따라서 이 루프에서 큰따옴표 "a:b:c:d:"는 단일 항목이므로 출력이 한 줄만 표시되는 이유는 무엇입니까?

the output is a b c d

for i in $lis;
do 
    echo the output is $i
done

여기서는 $lis인용되지 않았으므로 쉘은 IFS사용자가 설정한 값에 따라 단어 분할을 수행합니다. 쉘은 for 루프에 제공된 4개의 항목이 있음을 볼 수 있습니다. 따라서 네 줄의 출력이 표시되는 이유는 무엇입니까?

변수를 큰따옴표로 묶으면 "$lis"단어 분할이 수행되지 않으므로 첫 번째 경우와 동일한 출력(한 줄만)이 표시됩니다.

관련 정보