[英]shell - temp IFS as newline only. Why doesn't this work: IFS=$(echo -e '\n')
[英]If bash doesn't preserve a backslash in double quotes, then why does echo -e “\n” work?
用雙引號括起字符會保留引號內所有字符的字面值,但$,`,\\除外,並且,當啟用歷史記錄擴展時,!
考慮到這一點, 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.