Board logo

标题: 批处理中管道作为子进程不能改变变量 [打印本页]

作者: 523066680    时间: 2009-12-28 09:32     标题: 批处理中管道作为子进程不能改变变量

可能是以前没仔细学吧,这次从bash 教程得知
  作为子进程的运行的管道,不能够改变脚本的变量.
  1 variable="initial_value"
  2 echo "new_value" | read variable
  3 echo "variable = $variable"   #variable = initial_value


测试了一下
echo  a|set b=1
echo %b%
set b=1|echo  a
echo %b%


都是显示%b%

[ 本帖最后由 523066680 于 2009-12-28 10:57 编辑 ]
作者: 523066680    时间: 2009-12-28 09:37

上面管道另一端没有接收信息,我再测试了一下

(echo c &echo b)|for /f %a in ('sort') do set x=%a
回显说 x=b
然后说 x=c
但echo %x% 仍显示%x%
作者: zqz0012005    时间: 2009-12-28 12:39

的确是没仔细吧。
子进程怎么能改变父进程的内存空间?(除了共享内存)
同样父进程也不能在子进程产生后再改变子进程的变量(还是因为不同的内存空间),除非产生之前改变变量,再让子进程继承。
作者: 523066680    时间: 2009-12-28 13:22

说的是俺不知道管道里面的命令是属于子进程呢。
作者: qzwqzw    时间: 2010-1-3 11:36

子进程的说法是第一次听说
但确实也很有道理
以前学习的时候
是把“管道”理解成cmd这个“外壳之外”又开启了一层“外壳”
在外面这个外壳中运行完管道命令后再抛弃掉它
echo  a|set b=1的运行过程类似于
cmd /c:echo a>tmpfile
cmd /c:set b=1<tmpfile
看来都是老观念了
作者: wc726842270    时间: 2011-3-7 11:07

学习了,看来用"原理"去理解"原理"是一种比较好的做法,毕竟事物并不是独立存在的




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2