Bash 混乱的空壳报价

Bash 混乱的空壳报价,bash,shell,sh,Bash,Shell,Sh,我不是壳牌的新手,但仍然对一些不太复杂的报价问题感到困惑。我想一定有什么误解了 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: 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)应该是
不要引用我的话

对于b:a),
'\t'
抑制了
\t
的特殊含义,因此我认为b)应该是
不要也引用我的话

对于c:我理解c为什么起作用,但不理解a&b和c之间的区别

对于d:在
之间没有区别

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


使用
/bin/echo
代替
(内置)解决问题Mac上的echo
。后一个将解释反斜杠。

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

有关更多信息,请参见此处:

根据bash

  • 第一个应该返回\n不要引用我的话
  • 第二个应该像第一个一样返回
  • 第三个应该回来不要引用我的话
  • 最后一个应该会返回\t请告诉我
  • 原因:

  • 第一种方法是将don\t放在单引号中,以此取代它
  • 您仅替换了\t
  • 由于\t意味着按原样打印\t之后的字符,因此不存在缩放
  • 双引号不表示替换字符

  • 您是否向
    -echo
    提供
    -e
    ?我使用Mac,而
    -echo
    似乎没有
    -e
    选项。您的意思是
    -n
    ?您的
    echo
    似乎在解释反斜杠转义字符。您的
    echo
    可能使用了别名。键入
    键入echo
    ,看看您得到了什么?@aubhava
    echo是一个shell内置的
    是的,我就是这么想的。所以让事情看起来很奇怪的是我的
    echo
    在字符串被
    返回后解释反斜杠,就像你所描述的那样,对吗?你能检查别名吗?也许你正在使用带有参数的echo我使用
    /bin/echo
    ,现在一切都像你说的一样。以前我使用
    内置回声
    。。