免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3436 | 回复: 13
打印 上一主题 下一主题

\把我搞晕了,请指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-02 22:50 |只看该作者 |倒序浏览
正在学习abs,其中“\"让我很难理解:

echo \z          # z      
echo \\z         #\z
echo '\z'        #\z
echo '\\z'        #\\z

后三个容易理解,第一个为什会成为space?

1    echo `echo \z`           # z         
2    echo `echo \\z`          # z         
3    echo `echo \\\z`         #\z
4    echo `echo \\\\z`        #\z
5    echo `echo \\\\\\z'       #\z
6    echo `echo \\\\\\\z'      #\\z

第二行和上面的 echo \\z不一样吗?
为什么3、4、5行结果一样,而到第6行多了一个\就不一样了?\的作用和它的奇偶数没有对应关系吗?

感觉很乱啊,找不到规律,比如奇数偶数个\对结果的影响。

请指教啊!

[ 本帖最后由 loveface 于 2008-4-8 14:42 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-04 07:52 |只看该作者

回复 #1 loveface 的帖子

是不是太简单了,这问题。

论坛徽章:
0
3 [报告]
发表于 2008-04-04 20:29 |只看该作者
http://bbs.chinaunix.net/viewthr ... A1%D6%ED&page=1
看看这个,我也一直没有搞清楚这个问题!关注中。。。

论坛徽章:
0
4 [报告]
发表于 2008-04-07 01:38 |只看该作者
这是我的看法,不一定正确:
echo `echo \z`,简称第一个echo为echoA,第二个echo为echoB
在``中的echoB命令中的字母前有\,不对其后的字母有转义作用,
echo `echo \\\z`  = echo \\z
echo `echo \\\\z` = echo \\z
echoA中 \ 还是起作用的,所以上面的结果都为
\z

论坛徽章:
7
子鼠
日期:2014-04-30 15:17:002015年亚洲杯之伊拉克
日期:2015-03-24 09:32:422015亚冠之德黑兰石油
日期:2015-08-17 09:43:51黑曼巴
日期:2016-08-19 14:58:0815-16赛季CBA联赛之北控
日期:2017-01-20 09:34:40CU十四周年纪念徽章
日期:2017-02-20 16:03:5215-16赛季CBA联赛之辽宁
日期:2017-07-05 09:41:54
5 [报告]
发表于 2008-04-07 08:59 |只看该作者
刚开始看 the c programme language
其中有道 练习题
要求
打印几个\t \n \b 之类的字符 然后再打印 几个没有特殊功能的字符  比如 \z
做到这个题的时候  我一编译  提示 未知的跳脱字符  我以为错了,就跳过去了
今天看到lz的问题 我又做了一遍 还是那样的提示 不过是个警告 可执行文件还是可以生成的。
printf("%c",'\z')    运行结果 就是一个z (我的理解是 \? 如果跳脱有效 则为跳脱字符 如果无效则为 ? 本身)

第一个理解了 后边的就好说了吧!
晕 没看清楚 第一个是 space z 吗?
我这里是这样的。
echo \z |wc -c
1

[ 本帖最后由 happyc84 于 2008-4-7 09:08 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2008-04-07 09:09 |只看该作者

回复 #1 loveface 的帖子

set -x
command 就清楚是怎么回事了。

  1. $ set -x

  2. $ echo `echo \\\z`
  3. ++ echo '\z'
  4. + echo '\z'
  5. \z
复制代码

论坛徽章:
0
7 [报告]
发表于 2008-04-07 15:41 |只看该作者

回复 #6 blackold 的帖子

还是不明白
[root@localhost shell]# echo `echo \\\\\\\q`
echo `echo \\\\\\\q`
echo \\\\q
++ echo '\\q'
+ echo '\\q'
\\q
[root@localhost shell]# echo \\\\\\\q
echo \\\\\\\q
+ echo '\\\q'
\\\q
为什么第一个`echo \\\\\\\q`出来的是\\\\q 而第二个出来的是\\\q

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2008-04-07 20:52 |只看该作者
原帖由 loveoov 于 2008-4-7 15:41 发表
还是不明白
[root@localhost shell]# echo `echo \\\\\\\q`
echo `echo \\\\\\\q`
echo \\\\q
++ echo '\\q'
+ echo '\\q'
\\q
[root@localhost shell]# echo \\\\\\\q
echo \\\\\\\q
+ echo '\\\q'
...


在第一个命令中,命令替换``(反引号)中的\\\\\\\q解释为\\\\q。
而在第二个命令中,\\\\\\\q解释为\\\q。

有与没有``(反引号)是不同的。

请参考以下相关主题:
关于引用符号 \ 的疑问
echo命令的转义的\b的疑惑
请教echo -e x\ty为啥不显示中间的制表符?
echo问题

[ 本帖最后由 blackold 于 2008-4-7 21:02 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-04-08 03:53 |只看该作者
搜了一堆贴,感觉问题还是出在``命令替换上!!!

echo `echo \\\\\\\q`
echo \\\\q
++ echo '\\q'
+ echo '\\q'
\\q
在命令替换中,与在""双引号中一样。\只会转义$ ` " \  <newline>(注:<newline>是\加回车,另起一行),除此之外,其它的不会转义!
\\\\\\\q中前面的3对\会转义,而最后一个\q不会转义,所以echo `echo \\\\\\\q`这当中的`echo \\\\\\\q`的结果为\\\\q
而echo \\\\q经过转义后,其结果为\\q


echo `echo \\\\\\q`
echo \\\q
++ echo '\q'
+ echo '\q'
\q
\\\\\\q这当中的前6个杠,这一行理所当然的转为\\\q
echo \\\g由于没有在命令替换中,所以最后的\q被转义,即输出为\q

个人拙见,如有不对的地方欢迎大家批评指正。同时感谢大家的热心帮助

[ 本帖最后由 灿烂小猪 于 2008-4-8 03:58 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-04-08 14:44 |只看该作者

回复 #5 happyc84 的帖子

是的,“# z” 中间是有空格的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP