Come posso sfuggire allo spazio bianco in un elenco di loop bash?

Ho uno script di shell bash che scorre attraverso tutte le directory figlio (ma non i file) di una determinata directory. Il problema è che alcuni nomi di directory contengono spazi.

Ecco i contenuti della mia directory di test:

$ls -F test Baltimore/ Cherry Hill/ Edison/ New York City/ Philadelphia/ cities.txt 

E il codice che scorre tra le directory:

 for f in `find test/* -type d`; do echo $f done 

Ecco l’output:

 test / Baltimora
 test / Cherry
 collina
 test / Edison 
 test / Nuovo
 York
 Città
 test / Philadelphia

Cherry Hill e New York City sono trattati come 2 o 3 voci separate.

Ho provato a citare i nomi dei file, in questo modo:

 for f in `find test/* -type d | sed -e 's/^/\"/' | sed -e 's/$/\"/'`; do echo $f done 

ma senza risultato.

Deve esserci un modo semplice per farlo.


Le risposte qui sotto sono fantastiche. Ma per renderlo più complicato, non sempre voglio usare le directory elencate nella mia directory di test. A volte voglio passare i nomi delle directory come parametri della riga di comando.

Ho preso il suggerimento di Charles di impostare l’IFS e ho trovato il seguente:

 dirlist="${@}" ( [[ -z "$dirlist" ]] && dirlist=`find test -mindepth 1 -type d` && IFS=$'\n' for d in $dirlist; do echo $d done ) 

e questo funziona bene a meno che non ci siano spazi negli argomenti della riga di comando (anche se tali argomenti sono citati). Ad esempio, chiamando lo script in questo modo: test.sh "Cherry Hill" "New York City" produce il seguente output:

 ciliegia
 collina
 Nuovo
 York
 Città