Ift*_*han 15 shell bash character-encoding ascii
我想使用以下命令输出所有 ascii 字符的字符串
for i in `seq 32 127`; do printf "%c" $i; done
Run Code Online (Sandbox Code Playgroud)
上面命令的输出是:
33333334444444444555555555566666666667777777777..............
Run Code Online (Sandbox Code Playgroud)
它是每个数字的第一个(从左边开始)数字。
浏览这个网站,我发现了我的问题的答案如何在 CLI 中打印所有可打印的 ASCII 字符?,但是我仍然不明白为什么我的原始代码段没有按预期输出 ascii 字符。
pra*_*tri 14
你不能printf "%c" $i
在 C 中使用like直接打印 ascii 代码。
您必须首先将 i 的十进制值转换为其八进制值,然后您必须使用 usingprintf
并将其放在\
它们各自的八进制值前面来打印它。
要打印A
,您必须将十进制 65 转换为八进制,即 101,然后您必须将该八进制值打印为:
printf "\101\n"
Run Code Online (Sandbox Code Playgroud)
这将打印A
.
因此,您必须将其修改为:
for i in `seq 32 127`; do printf \\$(printf "%o" $i);done;
Run Code Online (Sandbox Code Playgroud)
但是通过使用awk
你可以像C语言一样直接打印
awk 'BEGIN{for(i=32;i<=127;i++)printf "%c",i}';echo
Run Code Online (Sandbox Code Playgroud)