Ceci est documenté dans man bash. Une seule occurrence de n'importe quel caractère dans IFS qui n'est pas un espace délimite un champ.
De man bash:
Le shell traite chaque caractère d'IFS comme un délimiteur et divise les résultats des autres extensions en mots utilisant ces caractères comme terminateurs de champ. Si IFS n'est pas défini, ou si sa valeur est exactement <space><tab><newline>la valeur par défaut, les séquences de <space>,
<tab>et <newline>au début et à la fin des résultats des extensions précédentes sont ignorées, et toute séquence de caractères IFS qui ne se trouve pas au début ou à la fin sert à délimiter mots. Si IFS a une valeur autre que la valeur par défaut, les séquences de l'espace, de la tabulation et de la nouvelle ligne des caractères d'espacement sont ignorées au début et à la fin du mot, tant que le caractère d'espacement est dans la valeur d'IFS (un caractère d'espacement IFS ). Tout caractère dans IFS qui n'est pas un espace blanc IFS, ainsi que tout caractère d'espace blanc IFS adjacent, délimite un champ. Une séquence de caractères blancs IFS est également traitée comme un délimiteur. Si la valeur de IFS est nulle, aucun fractionnement de mot ne se produit. [Je souligne.]
Exemples: division de champ
Si IFS n'a pas de caractères d'espaces, alors les espaces sont inclus dans les champs:
$ ( IFS=',' x='one , two,three'; printf "<%s>\n" $x )
<one >
< two>
<three>
Si IFS a à la fois des blancs et une virgule, les séquences de blancs, suivies d'une virgule, suivies de séquences de blancs sont traitées comme un seul délimiteur:
$ ( IFS=' ,' x='one , two,three'; printf "<%s>\n" $x )
<one>
<two>
<three>
Les séquences de virgules sont interprétées comme des séquences de champs vides:
$ ( IFS=' ,' x='one,,,two,three'; printf "<%s>\n" $x )
<one>
<>
<>
<two>
<three>
Exemples: espaces blancs de début et de fin
Si IFS ne contient aucun espace, tous les espaces de début et de fin sont conservés dans les champs:
$ ( IFS=',' x=' one , two,three ,'; printf "<%s>\n" $x )
< one >
< two>
<three >
Si IFS contient des blancs, toutes les séquences de blancs de début ou de fin sont supprimées:
$ ( IFS=' ,' x=' one , two,three ,'; printf "<%s>\n" $x )
<one>
<two>
<three>