Linux Shell程式設計(27)——子shell

尹成發表於2014-09-30
執行一個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


相關文章