Це задокументовано в Росії man bash
. Одиничне виникнення будь-якого символу в IFS, який не є пробілом, обмежує поле.
Від man bash
:
Оболонка розглядає кожен символ IFS як роздільник і розбиває результати інших розширень на слова, використовуючи ці символи як термінатори поля. Якщо IFS не встановлено, чи його значення в точності <space><tab><newline>
, за замовчуванням, то послідовність <space>
,
<tab>
і <newline>
на початку і в кінці результатів попередніх розширень, ігнорується, а будь-яка послідовність символів МФСА не на початку або в кінці служить для визначення кордонів слова. Якщо IFS має значення, відмінне від типового, тоді послідовності пробілів символів пробілу, вкладки та новий рядок ігноруються на початку та в кінці слова, поки символ пробілу знаходиться у значенні IFS (символ пробілу IFS) ). Будь-який символ у IFS, який не є пробілом IFS, поряд із будь-якими суміжними символами пробілу IFS, обмежує поле. Послідовність символів пробілу IFS також розглядається як роздільник. Якщо значення IFS є нульовим, розщеплення слів не відбувається. [Наголос додано.]
Приклади: розділення поля
Якщо в IFS немає символів пробілу, то пробіли включаються в поля:
$ ( IFS=',' x='one , two,three'; printf "<%s>\n" $x )
<one >
< two>
<three>
Якщо в IFS є і пробіли, і кома, то послідовності пробілів з комою, а потім послідовності заготовок трактуються як один роздільник:
$ ( IFS=' ,' x='one , two,three'; printf "<%s>\n" $x )
<one>
<two>
<three>
Послідовності коми трактуються як послідовності порожніх полів:
$ ( IFS=' ,' x='one,,,two,three'; printf "<%s>\n" $x )
<one>
<>
<>
<two>
<three>
Приклади: провідна та кінцева пробіли
Якщо IFS не містить пробілів, то будь-яка провідна та кінцева пробіли зберігається у полях:
$ ( IFS=',' x=' one , two,three ,'; printf "<%s>\n" $x )
< one >
< two>
<three >
Якщо IFS містить пробіли, то будь-які провідні або кінцеві послідовності пробілів видаляються:
$ ( IFS=' ,' x=' one , two,three ,'; printf "<%s>\n" $x )
<one>
<two>
<three>