답변1
올바르게 언급했듯이 IFS
(필드 분할) 환경 변수는 여기서 중요한 역할을 합니다. 일반적으로 IFS
설정에는 <space>
, <tab>
및 <newline>
문자가 포함됩니다. 즉, 변수에 따옴표가 사용되지 않으면 쉘 인터프리터는 IFS
가능할 때마다 변수를 값별로 별도의 인수로 분리합니다(여러 IFS
문자를 압축하더라도).
따라서 변수에는 s
다음 값이 항상 존재합니다. 나머지는 해석에 달려있습니다.
1<newline>2<newline>3<newline>4
첫 번째에서는 for
쉘이 실행되기 전에 루프를 4번 $s
분할 하고 실행합니다. for
다음의 경우 echo
분할할 항목이 없으므로 각 요소가 한 줄에 인쇄됩니다(이것이 완료되었습니다 echo
).
위에서 언급했듯이 두 번째는 for
전체 값에 대해 한 번만 실행됩니다. s
지금 일어나고 있는 일은 쉘이 변수를 전달하기 전에 변수를 분리한다는 것입니다 s
(큰따옴표가 없기 때문입니다). 즉, 문자는 관련성이 없게 되며 각 숫자는 단지 매개변수일 뿐입니다. 여러 매개변수를 가져올 때 공백 문자로 구분하여 동일한 순서로 인쇄합니다.IFS
echo
x
<newline>
echo