Seu $item
termina com um retorno de carro, então o cursor volta para o início da linha e imprime <space>bs=4M
Você pode fazer item=${item%$'\r'}
Eu quero escrever um script que vai despejar todas as partições do meu dispositivo android através da ponte de depuração android e, como este é um processo demorado, eu quero notificar o usuário sobre o progresso, ecoando mensagens após certos eventos-chave acontecerem. Para minha surpresa, notei que às vezes echo
não imprime todos os caracteres que deveria.
O menor exemplo que reproduz o erro é:
#!/bin/bash
targets=$(adb shell "ls /dev/block/nand*")
for item in $targets; do
echo "Processing $item"
echo "dd if=$item bs=4M"
done
Isso produz a seguinte saída:
Processing /dev/block/nanda
dd if=/dev/block/nanda bs=4M
Processing /dev/block/nandd
dd if=/dev/block/nandd bs=4M
Processing /dev/block/nandg
dd if=/dev/block/nandg bs=4M
Processing /dev/block/nandj
bs=4M/dev/block/nandj
Processing /dev/block/nandb
dd if=/dev/block/nandb bs=4M
Processing /dev/block/nande
dd if=/dev/block/nande bs=4M
Processing /dev/block/nandh
bs=4M/dev/block/nandh
Processing /dev/block/nandc
dd if=/dev/block/nandc bs=4M
Processing /dev/block/nandf
dd if=/dev/block/nandf bs=4M
Processing /dev/block/nandi
bs=4M/dev/block/nandi
Por que isso acontece e como posso corrigi-lo?