子shell
1、在父shell中执行一个shell脚本,可以产生一个子shell
测试环境:
定义一个变量并输出
1
2
3
|
[dongzhi@iZ23eyxc0p2Z ~]$ STR=123 [dongzhi@iZ23eyxc0p2Z ~]$ echo $STR 123 |
编写测试脚本并执行
[
1
2
3
4
5
6
7
8
|
dongzhi@iZ23eyxc0p2Z ~]$ cat test .sh #!/bin/bash echo $STR [dongzhi@iZ23eyxc0p2Z ~]$ . /test .sh [dongzhi@iZ23eyxc0p2Z ~]$ export STR [dongzhi@iZ23eyxc0p2Z ~]$ . /test .sh 123 |
子shell不能直接使用父shell中定义的变量,需export提升为环境变量
2、在父shell中执行一条命令,在命令的末尾加上& 可以产生一个子shell
1
2
3
4
5
6
7
8
|
[dongzhi@iZ23eyxc0p2Z ~]$ STR=123;STR=abc [dongzhi@iZ23eyxc0p2Z ~]$ echo $STR abc [dongzhi@iZ23eyxc0p2Z ~]$ STR=123;STR=abc& [1] 16467 [dongzhi@iZ23eyxc0p2Z ~]$ echo $STR 123 [1]+ Done STR=abc |
定义一个变量STR赋值123,重新赋值abc,结果变量STR的值为abc,当把第二次赋值末尾加上&,变量STR的值没有变,说明第二次赋值没有 在当前shell,而是开启了一个子shell
3、使用()可以产生一个子shell
1
2
|
[dongzhi@iZ23eyxc0p2Z ~]$ STR=123&& (STR=abc) && echo $STR 123 |
同上面案例,()中变量赋值不能修改之前变量的值,也产生了子shell
4、在父shell中执行带管道的命令
1
2
|
[dongzhi@iZ23eyxc0p2Z ~]$STR=123|STR=456; echo $STR 123 |
打印子shell中的变量
1
2
|
[dongzhi@iZ23eyxc0p2Z ~]$ STR=123|{ STR=456; echo $STR; } 456 |