我不是shell的新手,但仍然对一些不太复杂的报价问题感到困惑。我想一定是有什么误解。
a: echo 'Don't quote me // Don quote me
b: echo Don't' quote me // Don quote me
c: echo Dont quote me // Dont quote me
d: echo Don"t" qoute me // Don quote me
以上三句话完全违背了我的直觉。单引号'...'
不是字面上返回引用的内容吗?我的想法是..
对于a:在单引号'Don'
中,只不过是一个常见的字符。所以a)应该是
Dont quote me
.
对于b:像a),'t'
抑制了t
的特殊含义,所以我认为b)也应该Dont quote me
。
对于c:我理解为什么c有效,但不理解a&b和c之间的区别。
对于 d:'
和 "
之间没有区别?
可能我误解了shell
如何解析和执行命令行。
通过在 Mac 上使用 /bin/echo
而不是 (built-in)echo
解决了问题。 后者将解释反斜杠。
根据 bash
- 第一个应该返回 不要引用我
- 第二个应该像第一个一样返回
- 第三个应该返回 不要引用我的话
- 最后一个应该返回 不要问我
为什么:
- 第一个你通过把它放在单引号内来逃避不要
- 你只逃脱了\t
- 没有覆盖,因为 \t 表示按原样打印 \ 之后的字符
- 双引号不排除 scape 字符
引用的理解是正确的,但似乎 OSX 上的 echo
是一个内置的 shell,用于解释反斜杠转义。可以通过执行 shopt -u xpg_echo
来关闭此行为。
有关更多信息,请参阅此处:如何在 AppleScript 中转义 shell 参数?