答え1
正しく述べたように、IFS
(フィールド分割)環境変数はここで重要な役割を果たします。通常、設定にはIFS
、<space>
および<tab>
文字<newline>
が含まれます。つまり、変数に引用符が使用されていない場合、シェルインタプリタはIFS
変数を値ごとに別々の引数に分割します(複数のIFS
文字を圧縮しても)。
したがって、変数にはs
次の値が常に存在します。残りは解釈に依存します。
1<newline>2<newline>3<newline>4
まず、for
シェルが実行される前にループを4回$s
分割して実行します。for
次の場合、echo
分割する項目がないため、各要素は1行に印刷されます(これが完了しましたecho
)。
前述のように、2 番目は、for
値全体に対して一度だけ実行されます。s
今起こっているのは、シェルが変数を渡す前に変数を分離することですs
(二重引用符がないため)。つまり、文字は関連性がなくなり、各数字はパラメータにすぎません。複数のパラメータをインポートするときは、空白文字で区切って同じ順序で印刷します。IFS
echo
x
<newline>
echo