bashで丸括弧を使う理由

bashで丸括弧を使うことでサブプロセスを走らせることができる

bashで丸括弧が出てきて、「?????」ってなったので、調べてみました。

./subproc.sh

#!/bin/sh

echo "[mainプロセスで変数に格納、mainプロセスで表示]"
PROC="main"
echo "PROC=${PROC}\n"

echo "[subプロセスで変数に格納、mainプロセスで表示]"
(PROC="sub")
echo "PROC=${PROC}\n"

echo "[subプロセスで変数に格納、subプロセスで表示]"
(PROC="sub"
echo "PROC=${PROC}\n"
)
[farmedgeek@Mint ~]$

要するにメインプロセスに影響を与えずに、丸括弧の中の処理を別プロセスで(フォークさせて)動かせるようです。

結果

[farmedgeek@Mint ~]$ ./subproc.sh
[mainプロセスで変数に格納、mainプロセスで表示]
PROC=main

[subプロセスで変数に格納、mainプロセスで表示]
PROC=main	#直前で(PROC="sub")としていますが、サブプロセス内なのでメインプロセスでのechoには出てきません

[subプロセスで変数に格納、subプロセスで表示]
PROC=sub	#サブプロセス内でechoまですれば、もちろん"sub"と出てきます

[farmedgeek@Mint ~]$

追記

フォークさせて、と書きましたが
プロセスIDを見てみたところ、別プロセスが立ってるわけではないみたいでした

[farmedgeek@Mint ~]$ cat ./subproc_ps.sh
#!/bin/sh

echo $$

(echo $$)
[farmedgeek@Mint ~]$ ./subproc_ps.sh
5148
5148
[farmedgeek@Mint ~]$