|
发表于 2004-12-21 19:32:29
|
显示全部楼层
()的确是在子shell中执行的,上面的情况我推断()的实现方式是使用了folk了父进程的办法,所以子shell能得到父shell的值,但之后是无法得到父shell的值,要确定的证实我的推断应该去看源码,但为了简单地证实我的推断,我作了如下的测试,我想是可以证明此推断的
我对测试作了一些说明
[root@kiron test]# echo $x
3
[root@kiron test]# (echo $x;sleep 10;echo $x) & //启动子shell,打印x值,睡眠10秒后,再打印x值,在10秒睡眠期间,我更改了父shell的x值,将这个命令行放在后台运行
[1] 16671
3
[root@kiron test]# x=4 //在父shell中更改了x值
[root@kiron test]# echo $x //在父shell中打印出x值现在为4
4
[root@kiron test]# 3 //10秒后,现在这个值是由后台的命令打印的,仍然是3,所以的确是在子shell中执行()的
更值得一提的是,所谓在“子shell中执行”仍然是一个统一的称谓,在不同的“子shell中执行”在系统中的实现恐怕不尽相同 |
|