シェルスクリプトファイルでエコーオプションは使用できません

シェルスクリプトファイルでエコーオプションは使用できません

私のshはbashです。 0〜9999 'for'ループのパーセンタイル進行状況インジケータが必要です... したがって、ループでこの行を使用していますが、出力は非常に奇妙です。

#!/bin/bash
declare -i percentile
for((i=0;i<=9999;i++))
do
        percentile=($i+1)%100
        if [ "$percentile" == 0 ];then
                echo -ne $((($i+1)/100))\%\r
        fi
done
echo -n '\n'

私が見たいのは、「1%」を出力してから、行を「2%」と「3%」に置き換えることです。しかし、「1%」、「2%」、「3%」ではありません...一行ずつ。

この.shファイルを実行した後に端末に表示される内容は次のとおりです。

-ne 1%r
-ne 2%r
-ne 3%r
-ne 4%r
-ne 5%r
-ne 6%r
-ne 7%r
-ne 8%r
-ne 9%r
-ne 10%r
...

bashは、「-ne」オプションと「echo」コマンドに対してエスケープされた「\ r」を認識しません。この問題を解決するにはどうすればよいですか?

ベストアンサー1

を使用する必要がある場合は、echo引用符付きリターンを試してください。つまり'\r'\r。その後、行全体は次のようになります。

echo -ne $((($i+1)/100))\%'\r'

見てなぜprintfがechoより優れているのですか?

おすすめ記事