Questo è documentato in man bash
. Una singola occorrenza di qualsiasi carattere in IFS che non sia uno spazio bianco delimita un campo.
Da man bash
:
La shell tratta ogni carattere di IFS come un delimitatore e divide i risultati delle altre espansioni in parole usando questi caratteri come terminatori di campo. Se IFS non è impostato o il suo valore è esattamente <space><tab><newline>
, l'impostazione predefinita, quindi le sequenze di <space>
,
<tab>
e <newline>
all'inizio e alla fine dei risultati delle espansioni precedenti vengono ignorate e qualsiasi sequenza di caratteri IFS non all'inizio o alla fine serve a delimitare parole. Se IFS ha un valore diverso da quello predefinito, le sequenze dello spazio dei caratteri degli spazi bianchi, della scheda e della nuova riga vengono ignorate all'inizio e alla fine della parola, purché il carattere degli spazi bianchi sia nel valore dell'IFS (un carattere degli spazi bianchi IFS ). Qualsiasi carattere in IFS che non sia uno spazio bianco IFS, insieme a qualsiasi carattere di spazio bianco IFS adiacente, delimita un campo. Una sequenza di caratteri spazi bianchi IFS viene anche trattata come delimitatore. Se il valore di IFS è nullo, non si verifica la divisione di parole. [Enfasi aggiunta.]
Esempi: divisione del campo
Se IFS non ha caratteri di spazi bianchi, nei campi è incluso spazio bianco:
$ ( IFS=',' x='one , two,three'; printf "<%s>\n" $x )
<one >
< two>
<three>
Se IFS ha sia spazi vuoti che una virgola, le sequenze di spazi vuoti, seguite da una virgola, seguite da sequenze di spazi vuoti vengono trattate come un delimitatore singolo:
$ ( IFS=' ,' x='one , two,three'; printf "<%s>\n" $x )
<one>
<two>
<three>
Le sequenze di virgole vengono interpretate come sequenze di campi vuoti:
$ ( IFS=' ,' x='one,,,two,three'; printf "<%s>\n" $x )
<one>
<>
<>
<two>
<three>
Esempi: spazi bianchi iniziali e finali
Se IFS non contiene spazi bianchi, nei campi viene mantenuto qualsiasi spazio bianco iniziale e finale:
$ ( IFS=',' x=' one , two,three ,'; printf "<%s>\n" $x )
< one >
< two>
<three >
Se IFS contiene spazi vuoti, vengono rimosse eventuali sequenze iniziali o finali di spazi vuoti:
$ ( IFS=' ,' x=' one , two,three ,'; printf "<%s>\n" $x )
<one>
<two>
<three>