Espaços como quebras de linha do comando inline for loop

5

Alguém se importa em me esclarecer por que os espaços no primeiro comando parecem ser interpretados como quebras de linha? Também ocorre substituindo print por echo.

$for l in $( find *.txt -exec head -1 {} \; ); echo $l;
9.16.11
09:20
9.19.11
18.41
9.21.11
07:15
$find *.txt -exec head -1 {} \;
9.16.11                 09:20
9.19.11                 18.41
9.21.11                 07:15
    
por CuriosityCasualty 08.10.2011 / 21:41

2 respostas

3

Confira a página man do seu shell, especificamente sobre a variável global IFS.

Especificamente, faça isso:

IFS=$(echo -en "\t\n%code%")

    
por 08.10.2011 / 22:07
5

Sua substituição de comandos induz a divisão de palavras em sua saída, com base no IFS. Especificamente, neste caso, está se dividindo em espaços. Não analise a saída de find . Em vez disso, faça isso:

for file in *.txt; do
    head -1 "${file}"
done

O wiki do Wooledge também tem boas informações sobre esse assunto aqui .

    
por 08.10.2011 / 22:33

Tags