Chinaunix
标题:
问个echo的问题(已解决)
[打印本页]
作者:
li2002
时间:
2005-04-02 16:28
标题:
问个echo的问题(已解决)
一直在看以前的精华贴,有个帖子中提到:
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的工作原理不就是拼装好命令依次执行其命令吗?
作者:
aerofox
时间:
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"
作者:
li2002
时间:
2005-04-02 20:19
标题:
问个echo的问题(已解决)
tks
cat _xxx2|xargs sh -c "echo -e"
怎么看不对结果??
作者:
aerofox
时间:
2005-04-02 20:55
标题:
问个echo的问题(已解决)
错了,是会看不到结果。xargs把cat命令输出的内容话到了"echo -e"后面,没有放到echo命令中,所以不行。要放到"echo -e"命令中,可能要用到xargs的-I(也许,记不清了),开关和{}参数,我行上UNIX试试才能确定。
作者:
li2002
时间:
2005-04-02 21:32
标题:
问个echo的问题(已解决)
知道了,{}在我的redhat linux里是-i参数
cat w|xargs -i{} sh -c "echo -e '{}'"
之前我没在{}上加‘’,造成读文件中内容当成是要执行命令,显示出错信息,以为是其他地方写错的了。
作者:
li2002
时间:
2005-04-02 21:50
标题:
问个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应该支持转义符号而输出
你好
复制代码
这里为什么又不支持了???
aerofox 帮我看看,谢谢!
作者:
aerofox
时间:
2005-04-03 17:23
标题:
问个echo的问题(已解决)
这个我就不清楚了,我还没用过带中文的UNIX/LINUX,没接触过bash,我所用过的echo也都不带-e参数,还不敢乱说~~
请大侠们指招吧~~
作者:
寂寞烈火
时间:
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
作者:
li2002
时间:
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解释了几次,怎样才能文件中无引号时能显示出汉字来??
作者:
li2002
时间:
2005-04-04 15:01
标题:
问个echo的问题(已解决)
up一下
作者:
li2002
时间:
2005-04-07 15:42
标题:
问个echo的问题(已解决)
再up!
作者:
guangzongy
时间:
2005-04-07 17:35
标题:
问个echo的问题(已解决)
[kennyyu@haha shellTest]$ echo -e "\xC4\xE3\xBA\xC3"
你好
[kennyyu@haha shellTest]$ echo -e '\xC4\xE3\xBA\xC3'
你好
[kennyyu@haha shellTest]$ echo -e \\xC4\\xE3\\xBA\\xC3
你好
复制代码
没有被"或者'所屏蔽,或用\进行转义的\(eg. \\xC4)首先会在shell中进行一次转义处理,被shell的转义,
echo -e \xC4\xE3\xBA\xC3
复制代码
已经成了:
echo -e xC4xE3xBAxC3
复制代码
注意:此时尽管echo 带了-e参数,但是后面已经不是\000的东西了。
因此,
echo -e \xC4\xE3\xBA\xC3 得到的结果为xC4xE3xBAxC3就可以理解了
作者:
li2002
时间:
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应该支持转义符号而输出
代码:
你好
这里为什么又不支持了???
作者:
r2007
时间:
2005-04-07 22:32
标题:
问个echo的问题(已解决)
try
cat w|xargs -0i{} sh -c "echo -e \"{}\""
复制代码
xargs会首先按照自己的方式转义的,参数-0可以禁止这个功能,有兴趣可以仔细看一下man xargs中的说明。
作者:
li2002
时间:
2005-04-08 08:35
标题:
问个echo的问题(已解决)
谢谢r2007!果然行了。
cat w
"\xC4\xE3\xBA\xC3"
cat w|xargs -0 -i{} sh -c "echo -e '{}'"
"你好"
结果和直接echo一样。
作者:
guangzongy
时间:
2005-04-08 09:17
标题:
问个echo的问题(已解决)
老大就是老大!!
作者:
ivhb
时间:
2005-04-08 09:26
标题:
问个echo的问题(已解决)
$ cat _xxx2
"\xC4\xE3\xBA\xC3"
$ echo -e `cat _xxx2`
"你好"
$ cat _xxx2|xargs echo -e //??????对于xargs,这个可以么?换个cat_xxx2 | xargs -i 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不支持这种转义
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2