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
,看看您得到了什么?@aubhavaecho是一个shell内置的
是的,我就是这么想的。所以让事情看起来很奇怪的是我的echo
在字符串被返回后解释反斜杠,就像你所描述的那样,对吗?你能检查别名吗?也许你正在使用带有参数的echo我使用/bin/echo
,现在一切都像你说的一样。以前我使用内置回声
。。