令人困惑的外壳报价

  • 本文关键字:外壳 bash shell sh
  • 更新时间 :
  • 英文 :


我不是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

  1. 第一个应该返回 不要引用我
  2. 第二个应该像第一个一样返回
  3. 第三个应该返回 不要引用我的话
  4. 最后一个应该返回 不要问我

为什么:

  1. 第一个你通过把它放在单引号内来逃避不要
  2. 你只逃脱了\t
  3. 没有覆盖,因为 \t 表示按原样打印 \ 之后的字符
  4. 双引号不排除 scape 字符
您对 shell

引用的理解是正确的,但似乎 OSX 上的 echo 是一个内置的 shell,用于解释反斜杠转义。可以通过执行 shopt -u xpg_echo 来关闭此行为。

有关更多信息,请参阅此处:如何在 AppleScript 中转义 shell 参数?

相关内容

  • 没有找到相关文章

最新更新