Jest to udokumentowane w man bash
. Pojedyncze wystąpienie dowolnego znaku w IFS, który nie jest spacją, ogranicza pole.
Od man bash
:
Powłoka traktuje każdy znak IFS jako ogranicznik i dzieli wyniki innych rozszerzeń na słowa, używając tych znaków jako terminatorów pól. Jeżeli IFS nie jest ustawione, czy jego wartość jest dokładnie <space><tab><newline>
, domyślny, a następnie sekwencje <space>
,
<tab>
oraz <newline>
na początku i na końcu wyników z poprzednich rozszerzeń są ignorowane, a każda sekwencja znaków IFS nie na początku lub na końcu służy do oddzielania słowa. Jeśli IFS ma wartość inną niż domyślna, to sekwencje spacji, tabulacji i nowej linii są ignorowane na początku i na końcu słowa, o ile spacja ma wartość IFS (spacja IFS ). Każdy znak w IFS, który nie jest białą spacją IFS, wraz z dowolnymi sąsiadującymi znakami białych spacji IFS, ogranicza pole. Sekwencja białych znaków IFS jest również traktowana jako separator. Jeśli wartość IFS wynosi null, nie występuje dzielenie słów. [Podkreślenie dodane.]
Przykłady: dzielenie pól
Jeśli IFS nie ma znaków białych znaków, to białe pola są zawarte w polach:
$ ( IFS=',' x='one , two,three'; printf "<%s>\n" $x )
<one >
< two>
<three>
Jeśli IFS ma zarówno spacje, jak i przecinek, to sekwencje spacji, po których następuje przecinek, a następnie sekwencje spacji są traktowane jako pojedynczy separator:
$ ( IFS=' ,' x='one , two,three'; printf "<%s>\n" $x )
<one>
<two>
<three>
Sekwencje przecinków są interpretowane jako sekwencje pustych pól:
$ ( IFS=' ,' x='one,,,two,three'; printf "<%s>\n" $x )
<one>
<>
<>
<two>
<three>
Przykłady: wiodące i końcowe białe znaki
Jeśli IFS nie zawiera białych znaków, wszelkie początkowe i końcowe białe znaki są przechowywane w polach:
$ ( IFS=',' x=' one , two,three ,'; printf "<%s>\n" $x )
< one >
< two>
<three >
Jeśli IFS zawiera spacje, wówczas usuwane są wszystkie wiodące lub końcowe sekwencje spacji:
$ ( IFS=' ,' x=' one , two,three ,'; printf "<%s>\n" $x )
<one>
<two>
<three>