10 進数を ASCII 文字で印刷します。私のコマンドは期待どおりに出力されません。

10 進数を ASCII 文字で印刷します。私のコマンドは期待どおりに出力されません。

次のコマンドを使用してすべてのASCII文字の文字列を出力したい

for i in `seq 32 127`; do printf "%c" $i; done

上記のコマンドの出力は次のようになります。

33333334444444444555555555566666666667777777777..............

各数字の最初の(左から)数字です。

このサイトを閲覧しながら、私の質問に対する回答を見つけました。CLIで印刷可能なすべてのASCII文字をどのように印刷しますか?しかし、元のコードスニペットが期待どおりにASCII文字を出力しない理由はまだ理解できません。

ベストアンサー1

printf "%c" $iCで同様の方法を使用してASCIIコードを直接印刷することはできません。

あなたが最初にする必要がありますiの10進値を8進値に変換その後、usingを使用して印刷し、その8進数値の前にprintf追加する必要があります。\

を印刷するには、A10進数65を8進数(101)に変換してから、8進数の値を次のように印刷する必要があります。

printf "\101\n"

これで印刷されますA

したがって、次のように修正する必要があります。

for i in `seq 32 127`; do printf \\$(printf "%o" $i);done;

ただし、次のようにawkC言語のように直接印刷できます。

awk 'BEGIN{for(i=32;i<=127;i++)printf "%c",i}';echo

おすすめ記事