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"
단어 분할이 수행되지 않으므로 첫 번째 경우와 동일한 출력(한 줄만)이 표시됩니다.