次のコマンドを使用してすべてのASCII文字の文字列を出力したい
for i in `seq 32 127`; do printf "%c" $i; done
上記のコマンドの出力は次のようになります。
33333334444444444555555555566666666667777777777..............
各数字の最初の(左から)数字です。
このサイトを閲覧しながら、私の質問に対する回答を見つけました。CLIで印刷可能なすべてのASCII文字をどのように印刷しますか?しかし、元のコードスニペットが期待どおりにASCII文字を出力しない理由はまだ理解できません。
ベストアンサー1
printf "%c" $i
Cで同様の方法を使用してASCIIコードを直接印刷することはできません。
あなたが最初にする必要がありますiの10進値を8進値に変換その後、usingを使用して印刷し、その8進数値の前にprintf
追加する必要があります。\
を印刷するには、A
10進数65を8進数(101)に変換してから、8進数の値を次のように印刷する必要があります。
printf "\101\n"
これで印刷されますA
。
したがって、次のように修正する必要があります。
for i in `seq 32 127`; do printf \\$(printf "%o" $i);done;
ただし、次のようにawk
C言語のように直接印刷できます。
awk 'BEGIN{for(i=32;i<=127;i++)printf "%c",i}';echo