IFS的全名為Internal Field Separator,用來在變量擴展後進行單詞分割,其默認值是<space><tab><newline>。可以通過
cat -etv <<<"$IFS"來查看。IFS變量通常與read命令、參數擴展 以及命令替換一起使用。
bash的man page中這樣寫道:
shell把IFS中的每個字符都看做一個分隔符,並用它們來將參數擴展的結果切分成word。如果IFS沒有設置,或者設置為默認值,那麼先前擴展的結果中,開始和末尾的空白符序列會被忽略,而其他的沒有在開始和末尾的IFS字符序列用來分割word。如果IFS中含有非<space><tab><newline>字符,那麼位於word開頭的空白符<space><tab>會被忽略,只要這些空白符包含在IFS的值中;IFS中的任何非空白符連同相鄰的空白符劃分一個field。IFS空白符序列也被當做一個分隔符。如果IFS是null,則不會進行分割。
總結:
-
IFS中的字符可以分為兩類:空白符(<space><tab><newline>)和非空白符,兩者的用法有區別:開頭和結尾的空白符會被忽略,兒非空白符不能被忽略;連續的空白符被當做一個分隔符,而連續的非空白符被當做多個分隔符。
-
一個非空白符連同其相鄰的空白符序列一起構成一個分隔符。