* サブシェルとグループコマンド [#y3ec5d4f]

** サブシェル [#z9863e75]
 cd $HOME
 (
   cd /tmp
   ls -1 > files.txt
 )
 pwd
サブシェルは子プロセスのシェルで実行されるため、サブシェル内のcd等は元のシェルに影響しない。従って、上のスクリプトの最終行のpwdコマンドは$HOMEを出力する。

** グループコマンドの結果をファイルへ出力 [#ud30b8e2]
 {
   echo 1;
   echo 2;
   echo 3;
 } > num.txt

*** グループコマンドを使わず同様にする場合 [#l6c4e434]
 echo 1 > num.txt
 echo 2 >> num.txt
 echo 3 >> num.txt

*** サブシェルで同様にする場合 [#q1450bd2]
 (
  echo 1;
  echo 2;
  echo 3;
 ) > num.txt

** サブシェルとグループコマンドの違い [#l0b09ae8]
グループコマンド内で環境変数を設定(更新)した場合、ブロックを抜けても設定が残る。

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

上の結果が以下。

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

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