我不是 shell 的新手,但仍然对一些不太复杂的引用问题感到困惑。我想一定是有什么误解。

a: echo 'Don\'t quote me // Don    quote me
b: echo Don'\t' quote me // Don    quote me
c: echo Don\t quote me   // Dont quote me
d: echo Don"\t" qoute me // Don    quote me

以上三个引文完全违背我的直觉。单引号 '...' 不是从字面上返回引用的内容吗?我以为是..

对于 a: 在单引号 'Don\' 中, \ 只不过是一个普通字符。所以 a) 应该是 Don\t quote me

对于 b: 就像 a),'\t' 抑制了 \t 的特殊含义,所以我认为 b) 也应该是 Don\t quote me

对于 c:我明白为什么 c 有效,但不明白 a&b 和 c 之间的区别。

对于 d: '" 之间没有区别?

可能我误解了 shell 如何解析和执行命令行..

在 Mac 上通过使用 /bin/echo 而不是 (built-in)echo 解决了问题。后一个将解释反斜杠。

最佳答案

根据 bash

  • 第一个应该返回 不要引用我
  • 第二个应该像第一个一样返回
  • 第三个应该返回不要引用我
  • 最后一个应该返回 Don\t qoute me

  • 为什么:
  • 第一个你通过将它放在单引号中来逃避 don\t
  • 你只逃脱了\t
  • 没有转义,因为\t 表示在\之后打印字符,就像
  • 双引号不能转义转义字符
  • 关于bash - 令人困惑的 shell 牌报价,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21703797/

    10-15 12:02