「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'}

関連情報