Esto está documentado en man bash
. Una sola aparición de cualquier carácter en IFS que no sea un espacio en blanco delimita un campo.
De man bash
:
El shell trata cada carácter de IFS como un delimitador, y divide los resultados de las otras expansiones en palabras usando estos caracteres como terminadores de campo. Si IFS no está establecido, o su valor es exactamente <space><tab><newline>
, el valor predeterminado, entonces las secuencias de <space>
,
<tab>
y <newline>
al principio y al final de los resultados de las expansiones anteriores se ignoran, y cualquier secuencia de caracteres IFS que no esté al principio o al final sirve para delimitar palabras. Si IFS tiene un valor diferente al predeterminado, las secuencias de los espacios en blanco, tabulación y nueva línea se ignoran al principio y al final de la palabra, siempre que el carácter de espacio en blanco esté en el valor de IFS (un carácter de espacio en blanco IFS ) Cualquier carácter en IFS que no sea espacio en blanco IFS, junto con cualquier carácter de espacio en blanco IFS adyacente, delimita un campo. Una secuencia de caracteres de espacio en blanco IFS también se trata como un delimitador. Si el valor de IFS es nulo, no se divide la palabra. [Énfasis añadido.]
Ejemplos: división de campo
Si IFS no tiene caracteres de espacio en blanco, entonces el espacio en blanco se incluye en los campos:
$ ( IFS=',' x='one , two,three'; printf "<%s>\n" $x )
<one >
< two>
<three>
Si IFS tiene espacios en blanco y una coma, entonces las secuencias de espacios en blanco, seguidas de una coma, seguidas de secuencias de espacios en blanco, se tratan como un delimitador único:
$ ( IFS=' ,' x='one , two,three'; printf "<%s>\n" $x )
<one>
<two>
<three>
Las secuencias de comas se interpretan como secuencias de campos vacíos:
$ ( IFS=' ,' x='one,,,two,three'; printf "<%s>\n" $x )
<one>
<>
<>
<two>
<three>
Ejemplos: espacios en blanco iniciales y finales
Si IFS no contiene espacios en blanco, los espacios en blanco iniciales y finales se mantienen en los campos:
$ ( IFS=',' x=' one , two,three ,'; printf "<%s>\n" $x )
< one >
< two>
<three >
Si IFS contiene espacios en blanco, se eliminan las secuencias de espacios en blanco iniciales o finales:
$ ( IFS=' ,' x=' one , two,three ,'; printf "<%s>\n" $x )
<one>
<two>
<three>