实验1:变量$path的输出是空值。
root@37C:~# pwd | read path
root@37C:~# echo $path
root@37C:~#
实验2:
#代码:
$ ls -l1 | while read line
do
let count=$count+1
echo "line-${count}: $line"
done
--有输出结果:
line-1: 总用量 292
line-2: -rwxr-xr-x 1 root root 8648 9月 18 15:26 a.out
line-3: drwxr-xr-x 4 root root 4096 8月 29 22:49 bashell
line-4: drwxr-xr-x 4 root root 4096 10月 8 2012 ClusterManagement
line-5: -rw-rw-rw- 1 py py 230168 8月 9 19:14 ClusterManagement.zip
line-6: -rwxrwxrwx 1 root root 742 7月 28 16:48 ftp_upload.py
line-7: -rwxr-xr-x 1 root root 281 8月 4 09:36 gopherclient.py
line-8: -rw-r--r-- 1 root root 56 9月 18 13:31 output
line-9: drwxr-xr-x 2 root root 4096 9月 5 18:40 __pycache__
line-10: -rw-r--r-- 1 root root 76 9月 18 15:26 run.c
line-11: -rwxr-xr-x 1 root root 159 9月 5 18:38 run.py
line-12: -rwxr-xr-x 1 root root 313 9月 19 15:26 run.sh
line-13: drwxr-xr-x 2 root root 4096 9月 12 13:09 shellyard
line-14: -rwxr-xr-x 1 root root 911 8月 25 15:46 tem_run.py
line-15: drwxr-xr-x 3 root root 4096 8月 5 12:23 test
line-16: -rwxr-xr-x 1 root root 420 8月 5 09:37 travelDirectory.py
#在login-shell下,变量还是空值。
root@37C:~#
root@37C:~# echo $count
root@37C:~# echo $line
root@37C:~#
分析:
–实验1:
bash 在执行pwd|read line
时,管道两边的都是在子shell进程中执行,执行echo $var
是父shell进程中执行,由于子进程所创建,修改的变量不会保存返回到父进程,因此父shell是无法读到子shell变量(事实上,就没有path这个变量存在);
–实验2:
bash 执行ls -l1 | while read line
,管道符线可看做是父进程fork的两个子进程之间的通信,但$line与$count
变量一样不能传递回父环境中。