日期:2014-05-16  浏览次数:20707 次

转义符的一个问题,20分相送
:/bin # echo "\v\v\v"  
\v\v\v 
:/bin # echo \v\v\v 
vvv 
====一个思路没有打通,就是echo \v\v\v 直接呼出\v\v\v是去掉\的结果vvv,但加了""号呼出的结果增加了转义符\v\v\v,按照一般的解释双引号情况下的\符是起作用的,因此我原来的理解应该""下也是出现vvv的。事实上这个\符号没有消失掉,我解释为""下的\符没有生效,但这个就不好解释"\$0"的结论了, 
这个结论是:~/tmp> echo "\$0" -bash 
但是实际情况是否是这样,请各位大侠指教谢谢~~

------解决方案--------------------
你现在的问题是:

echo “\v\v\v" 输出:\v\v\v
echo "\$0" 输出:$0 ,依据前一个推论,他应该输出: \$0 ?

//引用bash中的帮助
Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $ , ` , and \ . The characters $ and ` retain their special meaning within double quotes. The backslash retains its special meaning only when followed by one of the following characters: $ , ` , ", \ , or <newline> . A double quote may be quoted within double quotes by preceding it with a backslash.
//==========================================================================
其中有一句:双引号中如果\要当成转义字符,必须跟$,`,\,"这四个字符。注意没有说v

但是echo ”\$0" ,首先shell将其"\$0"转义为"$0",然后echo程序输出"$0"。至于前一个,shell并不认为"\v"并不认为\是转义字符,因此不对其进行处理