簡體   English   中英

打印“ \\ x09”,打印0x20,如何將0x09打印到STDOUT?

[英]Print “\x09”, print 0x20, how to print 0x09 to STDOUT?

我嘗試將0x09(水平TAB)值打印到STDOUT,但在perl,python或bash中,將0x09替換為0x20(空格)。

$ hexdump -C <<< $(perl -e 'print "A\x09B" ')
00000000  41 20 42 0a                                       |A B.|
00000004

bash中的相同問題:

$ hexdump -C <<< $(printf "A\x09B")
00000000  41 20 42 0a                                       |A B.|
00000004

可以將0x09值打印到STDOUT嗎?

這里討論的是Bash 擴展 將命令放在反引號中會遇到相同的問題:

$ echo `python -c 'print "A\x09B"'`
A B

避免擴展; 它在空白處分割您的輸入,並重新加入下一個命令; 您會看到多個空格相同:

$ hexdump -C <<< $(python -c 'print "A\x20\x20\x20B"')
00000000  41 20 42 0a                                       |A B.|
00000004

使用管道代替:

$ python -c 'print "A\x09B"' | hexdump
0000000 41 09 42 0a
0000004

或引用命令(奇跡般地,多余的引號與命令行本身中使用的那些不沖突!):

hexdump -C <<< "$(python -c 'print "A\x20\x20\x20B"')"

擴展的子流程輸出是bash中的bug,將在bash 4.4中修復。

這完全是一個bash問題。 具體來說,這是一個bash錯誤,可以通過以下方法解決:

                 +-------- Add these ---------+
                 |                            |
                 v                            v
$ hexdump -C <<< "$(perl -e 'print "A\x09B"' )"
00000000  41 09 42 0a                                       |A.B.|
00000004

或者,

# Passed via STDIN as the original.
$ perl -e 'print "A\x09B"' | hexdump -C
00000000  41 09 42                                          |A.B|
00000003

# Passed via a file name.
$ hexdump -C <( perl -e 'print "A\x09B"' )
00000000  41 09 42                                          |A.B|
00000003

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM