|
发表于 2005-12-14 23:02:29
|
显示全部楼层
Post by sosogh
不过
echo abc|tee >(tr 'a-z' 'A-Z')|sed 's/a/9/'的结果是:
9bc
Abc
echo abc|tee >('sed 's/a/9/')|tr 'a-z' 'A-Z' 的结果是:
ABC
9BC
好象
cmd1 | tee > (cmd2) | cmd3
等价于:
cmd1 | cmd3
cmd1 | cmd2 | cmd3
再请教,谢谢!
下面这条语句执行时,首先会建立两个管道,cmd1的标准输出连接到tee的标准输入,tee的输出到标准输出的部分连接到cmd3的标准输入,tee的输出到文件的部分重定向到(cmd2) , 而(cmd2)的标准输出也作为cmd3的标准输入.
cmd1 | tee > (cmd2) | cmd3
所以,才会有你上面的结果.
首先,说一下这个 echo abc|tee >(tr 'a-z' 'A-Z')|sed 's/a/9/'
字符串"abc"经过tee被送到sed处理,得到 9bc
字符串"abc"经过tee被送到(tr 'a-z' 'A-Z')处理,得到ABC,然后会再次送给sed处理,但是此时没有小写字母,所以输出结果不受影响,仍为:ABC (你的第一个输出结果写错了吧?)
再说一下 echo abc|tee >(sed 's/a/9/')|tr 'a-z' 'A-Z'
字符串"abc"经过tee被送到tr处理,得到ABC
字符串"abc"经过tee被送到(sed 's/a/9')处理,,得到9bc, 然后9bc 会送给后面的tr处理,由于9bc
里面有小写子母,所以全部转换成大写,所以就得到了 9BC
如果改一下就可以得到小写的 9bc了,改为:echo abc|tee >(sed 's/a/9/' >&2 )|tr 'a-z' 'A-Z' |
|