用双引号括起字符会保留引号中所有字符的字面值,但$,`,\除外,并且,当启用历史记录扩展时,!。
考虑到这一点,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
这里发生了什么?
答案 0 :(得分:4)
继续阅读:
反斜杠只有在以下字符之一后才会保留其特殊含义:
$
,`
,"
,\
或<newline>
。
由于它后面跟着一封信,所以它没有保留其特殊含义,而是直接传递给该程序。