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%")
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
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 .