O problema é que usar cat em uma substituição de subshell como essa fará com que o bash tokenize a saída de acordo com IFS , que por padrão inclui espaços. Esse é o comportamento normal de um loop for . Provavelmente a correção mais fácil é:
while read line
do
echo $line
command $line
done < pets.txt
Observe que bash dividirá os argumentos até command , no entanto. Se você quisesse a linha como um argumento, basta citar:
while read line
do
echo $line
command "$line"
done < pets.txt