サブシェル

コマンドを()で括ることによって、元のシェルは子プロセスを生成しサブシェルとしてコマンドを実行することができます。 サブシェルは子プロセスとして実行されるので親の環境変数などを変更したくない時など様々な使用法があります。

一時的に環境変数を変更する

サブシェル内では環境変数をenにし、親シェルはそのままにできます。

$ (LANG=en; man 1 printf)

telnetコマンドを実行する

telnetなどの対話型コマンドもサブシェルを使うとワンライナーで実行することが出来ます。

( sleep 1;  echo "EHLO localhost";
sleep 1;    echo "MAIL FROM: ${FROM}";
sleep 1;    echo "RCPT TO: ${RCPT}";
sleep 1;    echo "DATA";
sleep 1;    echo "TESTMAIL";
sleep 1;    echo ".";
sleep 1;    echo "quit";
) | telnet "$SERVER" 25