"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"변수에 큰따옴표를 사용하면 단어 분리가 수행되지 않으므로 첫 번째 경우와 동일한 출력(단 한 줄)이 표시됩니다.

관련 정보