サブシェルのpidを取得する方法は?

サブシェルのpidを取得する方法は?

サブシェルのpidを取得する方法は?

たとえば、

$ echo $$
16808

元のシェルが拡張されているため機能しません$$

$ ( echo $$ )
16808

一重引用符が機能しないのはなぜですか?元のシェルから一重引用符を削除した後、サブシェル$$自体は拡張されませんか?

$ ( echo '$$' )
$$

なぜeval動作しないのですか?evalサブシェルによって実行されますか?元のシェルのPIDを提供するのはなぜですか?

$ ( eval echo '$$' )
16808

ありがとうございます。

ベストアンサー1

$ echo $BASHPID
37152
$ ( echo $BASHPID )
18633

マニュアルから:

BASHPID

現在のbashプロセスのプロセスIDに展開されます。これは$$、bashを再初期化する必要がないサブシェルと同じ場合とは異なります。

$

シェルのプロセスIDに展開されます。サブシェルでは、()サブシェルではなく現在のシェルのプロセスIDに展開されます。

関連:

おすすめ記事