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