我想编写一个脚本,通过 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'}