免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: li2002
打印 上一主题 下一主题

问个echo的问题(已解决) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-04-07 15:42 |只看该作者

问个echo的问题(已解决)

再up!

论坛徽章:
0
12 [报告]
发表于 2005-04-07 17:35 |只看该作者

问个echo的问题(已解决)


  1. [kennyyu@haha shellTest]$ echo -e "\xC4\xE3\xBA\xC3"
  2. 你好
  3. [kennyyu@haha shellTest]$ echo -e '\xC4\xE3\xBA\xC3'
  4. 你好
  5. [kennyyu@haha shellTest]$ echo -e \\xC4\\xE3\\xBA\\xC3
  6. 你好
复制代码


没有被"或者'所屏蔽,或用\进行转义的\(eg. \\xC4)首先会在shell中进行一次转义处理,被shell的转义,
  1. echo -e \xC4\xE3\xBA\xC3
复制代码

已经成了:
  1. echo -e xC4xE3xBAxC3
复制代码

注意:此时尽管echo 带了-e参数,但是后面已经不是\000的东西了。
因此,
echo -e \xC4\xE3\xBA\xC3 得到的结果为xC4xE3xBAxC3就可以理解了

论坛徽章:
0
13 [报告]
发表于 2005-04-07 19:40 |只看该作者

问个echo的问题(已解决)

这我明白
我是不明白这个
原贴
代码:


$ cat _xxx2
"\xC4\xE3\xBA\xC3"
$ echo -e `cat _xxx2`
"你好"
$ cat _xxx2|xargs echo -e
\xC4\xE3\xBA\xC3

那位解答一下?

终于把问题搞清楚了:这里面有几个关键点:
echo -e `cat _xxx2`这里的echo执行的是bash的buildin的echo函数,没有对应的echo.exe,source-code 在bash-src

cat _xxx2|xargs echo -e
这里面的echo执行的是一个echo.exe xargs通过 fork一个进程来执行这个外部命令的exe,source code 在sh-utils

而两个echo的实现不同,bash的buildin是可以支持出这种\x转义符号
sh-utils的echo.exe不支持这种转义



按照aerofox 兄的说法如要在xargs中用sh的buildin的echo,必须

代码:

cat w|xargs -i{} sh -c "echo -e  \"{}\""



试验了一下,这次确实是用了buildin的echo,但用原贴的例子,得到的结果仍然是
代码:

\xC4\xE3\xBA\xC3


按照buildin的echo应该支持转义符号而输出
代码:

你好


这里为什么又不支持了???

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
14 [报告]
发表于 2005-04-07 22:32 |只看该作者

问个echo的问题(已解决)

try
  1. cat w|xargs -0i{} sh -c "echo -e  \"{}\""
复制代码

xargs会首先按照自己的方式转义的,参数-0可以禁止这个功能,有兴趣可以仔细看一下man xargs中的说明。

论坛徽章:
0
15 [报告]
发表于 2005-04-08 08:35 |只看该作者

问个echo的问题(已解决)

谢谢r2007!果然行了。
cat w
"\xC4\xE3\xBA\xC3"
cat w|xargs   -0 -i{} sh -c "echo -e  '{}'"
"你好"

结果和直接echo一样。

论坛徽章:
0
16 [报告]
发表于 2005-04-08 09:17 |只看该作者

问个echo的问题(已解决)

老大就是老大!!

论坛徽章:
0
17 [报告]
发表于 2005-04-08 09:26 |只看该作者

问个echo的问题(已解决)



  1. $ cat _xxx2
  2. "\xC4\xE3\xBA\xC3"
  3. $ echo -e `cat _xxx2`
  4. "你好"
  5. $ cat _xxx2|xargs echo -e  //??????对于xargs,这个可以么?换个cat_xxx2 | xargs -i echo -e {}试试看?
  6. \xC4\xE3\xBA\xC3

  7. 那位解答一下?

  8. 终于把问题搞清楚了:这里面有几个关键点:
  9. echo -e `cat _xxx2`这里的echo执行的是bash的buildin的echo函数,没有对应的echo.exe,source-code 在bash-src

  10. cat _xxx2|xargs echo -e
  11. 这里面的echo执行的是一个echo.exe xargs通过 fork一个进程来执行这个外部命令的exe,source code 在sh-utils

  12. 而两个echo的实现不同,bash的buildin是可以支持出这种\x转义符号
  13. sh-utils的echo.exe不支持这种转义
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP