日期:2014-05-16  浏览次数:20826 次

管道符号|命令在uninx和linux下边有什么区别吗?
echo "fresh_time=5" | read fresh_time
echo $fresh_time

上边两条命令,我在uninx下边执行,可以得到显示结果为:fresh_time=5
但是在linux下边什么都没有,这是为什么了?

------解决方案--------------------
管道的每个命令都是在各自的子shell中运行的,
read fresh_time 这个命令只在它自己的子shell里有效,等到下面echo的时候就是另一个shell了,所以看不到fresh_time的值。

试试这个,把echo和read放到同一个shell里面
$ echo "fresh_time=5" | (read fresh_time; echo $fresh_time)
fresh_time=5

------解决方案--------------------
这个不是管道的问题,应该说也不是UNIX或LINUX的问题,是不同SHELL的差别,有的SHELL支持这种传递,有的不支持而已,这样肯定没问题:

fresh_time=$(echo "fresh_time=5");echo $fresh_time