免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-02 16:28 |只看该作者 |倒序浏览
一直在看以前的精华贴,有个帖子中提到:

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

我知道buildin优先于外部命令,为什么第二条命令却用外部命令,这是由xargs决定的吗?xargs的工作原理不就是拼装好命令依次执行其命令吗?

论坛徽章:
0
2 [报告]
发表于 2005-04-02 20:14 |只看该作者

问个echo的问题(已解决)

差不多。第一条单独的echo是用的内部(built-in)命令,第二种情况下是调用的外部命令,但不是叫echo.exe。在unix中,一个文件是否可执行不是靠扩展名来判断的,是靠文件权限来决定的。而且如果一个文件可执行,则执行时必须用文件的全名(包括扩展名)。这一点不同于DOS。
为什么xargs使用外部命令echo而不是内部命令echo,是因为内部命令echo的“内部”是相当于shell的,它是特定的shell所私有的,xargs不能跨过shell去调用shell的内部命令。如果一定要用,则应该是:
cat _xxx2|xargs sh -c "echo -e"

论坛徽章:
0
3 [报告]
发表于 2005-04-02 20:19 |只看该作者

问个echo的问题(已解决)

tks
cat _xxx2|xargs sh -c "echo -e"
怎么看不对结果??

论坛徽章:
0
4 [报告]
发表于 2005-04-02 20:55 |只看该作者

问个echo的问题(已解决)

错了,是会看不到结果。xargs把cat命令输出的内容话到了"echo -e"后面,没有放到echo命令中,所以不行。要放到"echo -e"命令中,可能要用到xargs的-I(也许,记不清了),开关和{}参数,我行上UNIX试试才能确定。

论坛徽章:
0
5 [报告]
发表于 2005-04-02 21:32 |只看该作者

问个echo的问题(已解决)

知道了,{}在我的redhat linux里是-i参数
cat w|xargs -i{} sh -c "echo -e '{}'"

之前我没在{}上加‘’,造成读文件中内容当成是要执行命令,显示出错信息,以为是其他地方写错的了。

论坛徽章:
0
6 [报告]
发表于 2005-04-02 21:50 |只看该作者

问个echo的问题(已解决)

不过问题来了
我问这个问题原来是在精华贴中的一篇文章
原贴


  1. $ cat _xxx2
  2. "\xC4\xE3\xBA\xC3"
  3. $ echo -e `cat _xxx2`
  4. "你好"
  5. $ cat _xxx2|xargs 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不支持这种转义
复制代码


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


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


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

  1. \xC4\xE3\xBA\xC3
复制代码

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

  1. 你好
复制代码

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

aerofox 帮我看看,谢谢!

论坛徽章:
0
7 [报告]
发表于 2005-04-03 17:23 |只看该作者

问个echo的问题(已解决)

这个我就不清楚了,我还没用过带中文的UNIX/LINUX,没接触过bash,我所用过的echo也都不带-e参数,还不敢乱说~~
请大侠们指招吧~~

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-04-03 17:51 |只看该作者

问个echo的问题(已解决)

/home/lee#echo $0
bash
/home/lee#echo -e "\xC4\xE3\xBA\xC3"
你好
/home/lee#exit
/home/lee#echo $0
-ksh
/home/lee#echo -e "\xC4\xE3\xBA\xC3"
\xC4\xE3\xBA\xC3

论坛徽章:
0
9 [报告]
发表于 2005-04-03 20:57 |只看该作者

问个echo的问题(已解决)

奇怪!
如果w文件内容是
"\xC4\xE3\xBA\xC3"

那么cat w|xargs -i{} sh -c "echo -e  \"{}\""
结果就是
你好
注意没有引号,不是显示
"你好"
上面命令行用单引号一样的效果。

要是我把命令行中的引号去掉
cat w|xargs -i{} sh -c "echo -e  {}"
这样就会显示
xC4xE3xBAxC3

结果也没有引号。

而如果w文件没有引号就不行,我试验想把这两个引号加在命令行中怎么组合都不行,还是显示原来字串,难道又是引号的问题??

没弄明白这里引号被shell解释了几次,怎样才能文件中无引号时能显示出汉字来??

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

问个echo的问题(已解决)

up一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP