サブシェルとグループコマンド

サブシェル

 cd $HOME
 (
   cd /tmp
   ls -1 > files.txt
 )
 pwd

サブシェルは子プロセスのシェルで実行されるため、サブシェル内のcd等は元のシェルに影響しない。従って、上のスクリプトの最終行のpwdコマンドは$HOMEを出力する。

グループコマンドの結果をファイルへ出力

 {
   echo 1;
   echo 2;
   echo 3;
 } > num.txt

グループコマンドを使わず同様にする場合

 echo 1 > num.txt
 echo 2 >> num.txt
 echo 3 >> num.txt

サブシェルで同様にする場合

 (
  echo 1;
  echo 2;
  echo 3;
 ) > num.txt

サブシェルとグループコマンドの違い

グループコマンド内で環境変数を設定(更新)した場合、ブロックを抜けても設定が残る。

 echo "### SUBSHELL"
 ( foo=1; )
 echo "foo: $foo"
 
 echo "### GROUPING"
 { bar=1; }
 echo bar: $bar

上の結果が以下。

 ### SUBSHELL
 foo:
 ### GROUPING
 bar: 1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-05-20 (日) 19:07:47