首页 > 学技术 > 技术网文 > Linux Shell > 正文

[保留] 感到困惑的一个逃逸字符的问题


来源 chinaunix.net 酷勤网整理

在bash中:

1.     $echo "\\"
输出:\


2.     $A='\\'
        $echo "$A"
输出:\\

为什么在2中,当变量A展开后第一个逃逸字符没有起到转义第二个反斜线的作用呢?

望指教,谢谢!!!



 yuyuyou 回复于:2006-01-12 21:22:21

echo -e "$A"

-e :启用反斜线控制字符的转换

[ 本帖最后由 yuyuyou 于 2006-1-12 21:23 编辑 ]


 wlcdhf 回复于:2006-01-12 22:19:35

可是不使用echo -e 也应该只输出一个反斜线呀,因为变量A展开后是两个反斜线,shell 会使用第一个反斜线转义第二个反斜线再传送给echo吧?所以最后应该只输出一个反斜线呀


 yuyuyou 回复于:2006-01-12 22:37:51

[root@localhost shell_200601]# echo "\\"
\
[root@localhost shell_200601]# echo -e "\\"
\
[root@localhost shell_200601]# echo '\\'
\\
[root@localhost shell_200601]# echo -e '\\'
\
[root@localhost shell_200601]# echo $A
\\
[root@localhost shell_200601]# echo -e $A
\
[root@localhost shell_200601]# echo "$A"
\\
[root@localhost shell_200601]# echo -e "$A"
\


 寂寞烈火 回复于:2006-01-13 01:42:16

http://bbs.chinaunix.net/viewthread.php?tid=686286&extra=page%3D3


 woodie 回复于:2006-01-13 09:31:22

引用:原帖由 wlcdhf 于 2006-1-12 22:19 发表
可是不使用echo -e 也应该只输出一个反斜线呀,因为变量A展开后是两个反斜线,shell 会使用第一个反斜线转义第二个反斜线再传送给echo吧?所以最后应该只输出一个反斜线呀 


环境是bash吧?这个与bash命令行处理的顺序有关。bash中对引用(单双引号和\)的处理在对参数扩展(展开变量)之前,所以将$A的值代入命令行之后bash就不再解释转义或称作逃逸字符。有时为了让shell再次进行命令行的一系列处理,需要使用eval。如:
$ A='\\'

$ eval echo $A
\



 wlcdhf 回复于:2006-01-13 12:20:25

谢谢woodie兄的解答,昨天看了oreilly 的learning bash shell 的command-line processing 后,我就猜想可能是你说的那种处理顺序。万分感谢呀!!!


 231053469 回复于:2006-01-13 13:05:17

计算机是正确的 你想要结果你的 \ 结果就加  -e启用
如果还有疑问看看 woodie 的贴自去吧


 ruifox 回复于:2006-01-19 19:31:12

奇怪,我在SCO系统上测试为什么不是这样?
A='\\'
echo "$A"

输出:\


 woodie 回复于:2006-01-20 15:28:20

引用:原帖由 ruifox 于 2006-1-19 19:31 发表
奇怪,我在SCO系统上测试为什么不是这样?
A='\\'
echo "$A"

输出:\ 


注意你的环境是否与别人一致?
请参考这里:
[url=http://bbs.chinaunix.net/viewthread.php?tid=686286&extra=page%3D3][color=blue]shell历险之——引用的迷途[/color]
还有这里:
[url=http://www.linuxsir.org/bbs/showthread.php?t=99465][color=blue]Bash命令行处理[详解][/color]


 macrodba 回复于:2006-01-26 09:50:25

good




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=687806
转载请注明作者名及原文出处



收藏本页到: