簡體   English   中英

如果bash沒有在雙引號中保留反斜杠,那么為什么echo -e“\\ n”有效?

[英]If bash doesn't preserve a backslash in double quotes, then why does echo -e “\n” work?

從bash手冊頁

用雙引號括起字符會保留引號內所有字符的字面值,但$,`,\\除外,並且,當啟用歷史記錄擴展時,!

考慮到這一點, echo -ne "\\n"生成換行符? 在它傳遞給echo之前,shell是否會擴展“\\ n”?

我認為它可能有用,因為echo是內置的,因此shell足夠聰明,可以做正確的事情。 但是,即使調用外部/usr/bin/echo -ne "\\n"可以。

更令人好奇的是,無論我是雙引號還是單引號\\n ,以下兩個命令都顯示bash正在傳遞\\\\n作為參數:

$ strace /usr/bin/echo "\n" 2>&1 | head -n1
execve("/usr/bin/echo", ["/usr/bin/echo", "\\n"], [/* 33 vars */]) = 0
$ strace /usr/bin/echo '\n' 2>&1 | head -n1
execve("/usr/bin/echo", ["/usr/bin/echo", "\\n"], [/* 33 vars */]) = 0

這里發生了什么?

繼續閱讀:

只有當后跟以下字符之一時,反斜杠才會保留其特殊含義: $`"\\<newline>

由於它后面只有一個字母,因此它不會保留其特殊含義,而是直接傳遞給程序。

暫無
暫無

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

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