在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
|