"echo"는 메시지의 일부를 먹습니다

"echo"는 메시지의 일부를 먹습니다

나는 안드로이드 디버그 브리지를 통해 내 안드로이드 장치의 모든 파티션을 덤프하는 스크립트를 작성하고 싶습니다. 이는 시간 집약적인 프로세스이기 때문에 특정 주요 이벤트 후에 메시지를 에코하여 사용자에게 진행 상황을 알리고 싶습니다. 놀랍게도 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'}

관련 정보