圆括号里的命令列表
( 命令1; 命令2; 命令3; ... )
嵌在圆括号里的一列命令在一个子shell里运行。
( 命令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的环境。