“echo”吃掉了部分消息

“echo”吃掉了部分消息

我想编写一个脚本,通过 android 调试桥转储我的 android 设备的所有分区,并且由于这是一个时间密集的过程,我想通过在某些关键事件发生后回显消息来通知用户有关进度。令我惊讶的是,我注意到有时echo不会打印应有的所有字符。

重现错误的最小样本是:

#!/bin/bash

targets=$(adb shell "ls /dev/block/nand*")

for item in $targets; do
    echo "Processing $item"
    echo "dd if=$item bs=4M"
done

这会产生以下输出:

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

为什么会发生这种情况以及如何解决它?

答案1

$item以回车符结尾,因此光标快速回到行首并打印<space>bs=4M

你可以做item=${item%$'\r'}

相关内容