Điều này được ghi lại trong man bash
. Một lần xuất hiện của bất kỳ ký tự nào trong IFS không phải là khoảng trắng phân định một trường.
Từ man bash
:
Shell xử lý từng ký tự của IFS như một dấu phân cách và chia kết quả của các phần mở rộng khác thành các từ bằng cách sử dụng các ký tự này làm dấu kết thúc trường. Nếu IFS là unset, hoặc giá trị của nó là chính xác <space><tab><newline>
, mặc định, sau đó trình tự <space>
,
<tab>
và <newline>
vào lúc bắt đầu và kết thúc của các kết quả của việc mở rộng trước đó được bỏ qua, và mọi chuỗi ký tự IFS không ở đầu hoặc cuối phục vụ để phân định từ ngữ. Nếu IFS có một giá trị khác với mặc định, thì các chuỗi của không gian ký tự khoảng trắng, tab và dòng mới sẽ bị bỏ qua ở đầu và cuối của từ, miễn là ký tự khoảng trắng nằm trong giá trị của IFS (ký tự khoảng trắng IFS ). Bất kỳ ký tự nào trong IFS không phải là khoảng trắng IFS, cùng với bất kỳ ký tự khoảng trắng IFS liền kề nào, sẽ phân định một trường. Một chuỗi các ký tự khoảng trắng IFS cũng được coi là một dấu phân cách. Nếu giá trị của IFS là null, không có sự phân tách từ nào xảy ra. [Nhấn mạnh thêm.]
Ví dụ: chia tách trường
Nếu IFS không có ký tự khoảng trắng, thì khoảng trắng được bao gồm trong các trường:
$ ( IFS=',' x='one , two,three'; printf "<%s>\n" $x )
<one >
< two>
<three>
Nếu IFS có cả khoảng trắng và dấu phẩy, thì các chuỗi khoảng trống, theo sau là dấu phẩy, theo sau là các khoảng trống được coi là một dấu phân cách duy nhất:
$ ( IFS=' ,' x='one , two,three'; printf "<%s>\n" $x )
<one>
<two>
<three>
Chuỗi dấu phẩy được hiểu là chuỗi các trường trống:
$ ( IFS=' ,' x='one,,,two,three'; printf "<%s>\n" $x )
<one>
<>
<>
<two>
<three>
Ví dụ: khoảng trắng hàng đầu và dấu
Nếu IFS không chứa khoảng trắng, thì mọi khoảng trắng ở đầu và cuối được giữ trong các trường:
$ ( IFS=',' x=' one , two,three ,'; printf "<%s>\n" $x )
< one >
< two>
<three >
Nếu IFS không có khoảng trống, thì bất kỳ chuỗi khoảng trống hàng đầu hoặc dấu vết nào sẽ bị xóa:
$ ( IFS=' ,' x=' one , two,three ,'; printf "<%s>\n" $x )
<one>
<two>
<three>