Ubuntu
printf 和 echo -e 給出不同的結果
我正在使用
\0n
轉義序列,echo -e
其中printf
n 是要列印的 ASCII 字元的八進制值。當我使用該語句echo -e "\0101"
時,shell 正在列印字元A
,但是當我使用printf "\0101"
shell 時,它正在列印1
,這是我提供的八進制數的最低有效位,但如果我0
在開始時刪除並使用命令,因為printf "\101"
它A
按預期正確列印。所以我懷疑為什麼這個特定的轉義序列會有這樣的差異,我嘗試了許多其他的轉義序列,但它們對 echo 和 printf 給出了相同的結果。我正在使用Ubuntu
並且目前正在使用bash
.
從
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
s 的語法或直接引用它。