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 ~]$