Bash

將十進制列印為 ascii 字元,我的命令未按預期輸出

  • August 5, 2020

我想使用以下命令輸出所有 ascii 字元的字元串

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

上述命令的輸出是:

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

它是每個數字的第一個(左起)數字。

通過這個站點,我發現了我的問題的答案如何在 CLI 中列印所有可列印的 ASCII 字元?,但是我仍然不明白為什麼我的原始程式碼段沒有按預期輸出 ascii 字元。

您不能通過printf "%c" $i在 C 中使用 like來直接列印 ascii 程式碼。

您必須首先將 i 的十進制值轉換為其八進制值,然後您必須使用 using 列印它printf並將其放在\各自的八進制值前面。

要列印A,您必須將十進制 65 轉換為八進制,即 101,然後您必須將該八進制值列印為:

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

引用自:https://unix.stackexchange.com/questions/44747