Loc*_*ost 0 ubuntu echo ascii escape-characters printf
我使用\0n转义序列与echo -e和printf其中n是要被打印的ASCII字符的八进制值。当我使用该语句时echo -e "\0101",shell 正在打印字符,A但是当我使用printf "\0101"shell 时,正在打印1这是我提供的八进制数的最低有效位,但是如果我0在开头删除并使用命令,因为printf "\101"它A按预期正确打印。所以我的疑问是为什么这个特定的转义序列会有如此大的差异,我尝试了许多其他转义序列,但它们使用 echo 和 printf 都给出了相同的结果。我正在使用Ubuntu并且目前正在研究bash.
从man echo1 :
\0NNN带有八进制值的字节NNN(1 到 3 位)
从man printf1 :
\NNN八进制值的字节NNN(1 到 3 位)
这两个命令不接受八进制序列的相同格式。
您可以轻松检查它们的实际输出是否有很大不同:
$ echo -en "\0101" | od -A n -t o1
101
Run Code Online (Sandbox Code Playgroud)
echo实际上是打印预期的单个字符A。
$ printf "\0101" | od -A n -t o1
010 061
Run Code Online (Sandbox Code Playgroud)
printf,另一方面,将其\010视为字符转义序列,随后将其1视为文字字符,它只是复制到输出中。
因此,它打印 a <backspace>(没有可见效果,是字符串的第一个字符),其八进制表示为010,后跟未解释的1。
1准确地说,您正在运行的命令很可能是 Bash 内置命令,而不是由man(可能来自coreutils)描述的命令。但两者help echo并help printf确认man的语法或直接引用它。