!["for 루프"에서 IFS 사용](https://linux55.com/image/154864/%22for%20%EB%A3%A8%ED%94%84%22%EC%97%90%EC%84%9C%20IFS%20%EC%82%AC%EC%9A%A9.png)
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"
변수에 큰따옴표를 사용하면 단어 분리가 수행되지 않으므로 첫 번째 경우와 동일한 출력(단 한 줄)이 표시됩니다.