* サブシェルとグループコマンド [#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