Linux Shell编程(27)——子shell

运行一个shell脚本时会启动另一个命令解释器. 就好像你的命令是在命令行提示下被解释的一样, 类似于批处理文件里的一系列命令.每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.


shell脚本也能启动他自已的子进程. 这些子shell(即子进程)使脚本并行地,有效率地地同时运行多个子任务.


一般来说,脚本里的一个外部命令(external command)能生成(forks)出一个子进程,然而Bash内建(builtin)的命令却不这样做,因此,内建命令比起外部的等价命令执行起来更快.


圆括号里的命令列表


( 命令1; 命令2; 命令3; ... )
嵌在圆括号里的一列命令在一个子shell里运行.



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


例子:子shell中的变量作用域

#!/bin/bash
# subshell.sh


echo


echo "Subshell level OUTSIDE subshell = $BASH_SUBSHELL"
# Bash, 版本 3, 增加了新的              $BASH_SUBSHELL 变量.
echo


outer_variable=Outer


(
echo "Subshell level INSIDE subshell = $BASH_SUBSHELL"
inner_variable=Inner


echo "From subshell, "inner_variable" = $inner_variable"
echo "From subshell, "outer" = $outer_variable"
)


echo
echo "Subshell level OUTSIDE subshell = $BASH_SUBSHELL"
echo


if [ -z "$inner_variable" ]
then
  echo "inner_variable undefined in main body of shell"
else
  echo "inner_variable defined in main body of shell"
fi


echo "From main body of shell, "inner_variable" = $inner_variable"
#  $inner_variable 会以没有初始化的变量来打印
echo
exit 0


原文地址:https://www.cnblogs.com/new0801/p/6176853.html