子shell

来源:互联网 发布:快递系统数据库设计 编辑:程序博客网 时间:2024/05/01 08:03
圆括号里的命令列表
( 命令1; 命令2; 命令3; ... ) 
嵌在圆括号里的一列命令在一个子shell里运行。

注意:  在子shell里的变量不能被这段子shell代码块之外外面的脚本访问.这些变量是不能被产生这个子shell的父进程(parent process)存取的,实际上它们是局部变量(local variables)。

简单来说就是小括号里面的命令会生成一个子shell,在子shelll里面运行。子shell继续父类的变量,但子shell修改的变量不会影响到父类。

例如:

str=hello

echo $str

{

  str=hellotest

  echo $str

}

echo $str

--------------------------------------

运行结果:

hello

hellotest

hello         #第三次打印,结果还是hello,因为子shell没有修改父shell的变量的值。

  在以上代码的括号里面和括号外面都加上一句打印当前shell的pid, echo $$。

str=hello

echo $$

echo $str

{

  str=hellotest

  echo $str

  echo $$

}

echo $str

------------------------------------------

运行脚本发现两个地方打印出来的pid都是一样的,为什么父shell和子shell的pid是一样的?子shell复制了父shell的环境。 

0 0
原创粉丝点击