Ciao,
innanzi tutto grazie per la dritta sul $'', si vede che, o mi è sfuggita oppure che l'hanno aggiunta da poco.....e devo dire meno male, ci si risparmia di eseguire un echo ogni volta che si vuole modificare IFS.
Quello che cerchi, lo trovi come "word splitting" sotto la sezione EXPANSION del man della bash.
In pratica che succede, se ai parametri viene fatta una 'espansione di parametro', una 'sostituzione di comando' oppure una 'espansione aritmetica', allora ai parametri viene fatto anche il 'word splitting', ovvero si divide il risultato di suddetta espensione in parole, usando come separatore di parole, ogni carattere contenuto nella variabile 'IFS'.
Facciamo degli esempi, impostando:
ovvero, come separatore di parole i caratteri 'a' e '\n'.
Esempio:
Codice: Seleziona tutto
\ls casa
ls: impossibile accedere a casa: No such file or directory
In questo caso, al parametro 'casa', la shell non ha fatto nessuna delle tre espansione su dette, quindi bash invoca 'ls' passandogli 'casa' come parametro.
Nel seguente esempio invece:
Codice: Seleziona tutto
casa="mamma"
\ls $casa
ls: impossibile accedere a m: No such file or directory
ls: impossibile accedere a mm: No such file or directory
al parametro '$casa' viene fatta l'espansione di parametro, per cui bash invoca 'ls' passandogli 'm' e 'mm'.
Ora dovrebbe esserti chiaro perchè, se IFS è impostata di default, quindi a '<spazio><tab><newline>', ed in una directory hai i file:
casa
ciao mamma
Ottieni due risultati differenti se esegui:
e se esegui
Codice: Seleziona tutto
for file in $(\ls *); do echo ${file}; done
casa
ciao
mamma
Ed anche perchè, nel thread,
viewtopic.php?f=2&t=25031 hai detto una sciocchezzuola (riferendoti all'ultimo script postato da aschenaz)

.
Ringraziandoti ancora per la dritta su $'' e con la speranza di esserti stato di aiuto,
Spina