「OreillyのBASHポケットガイド」を読んでいます。と言いました:
現在のBashプロセスのプロセスID。場合によっては、これは$$とは異なる場合があります。
上記の説明、説明$BASHPID
変数。
質問:どのような場合ですか?
例は、bashマンページのBASHPID
の説明に記載されています。
BASHPID
Expands to the process id of the current bash process. This
differs from $$ under certain circumstances, such as subshells
that do not require bash to be re-initialized.
これは、変数の内容を$$
およびBASHPID
の内容とともにサブシェルの外部に出力するサブシェルの例です。
$ echo $(echo $BASHPID $$) $$ $BASHPID
25680 16920 16920 16920
# | | | |
# | | | -- $BASHPID outside of the subshell
# | | -- $$ outside of the subshell
# | -- $$ inside of the subshell
# -- $BASHPID inside of the subshell
サブシェル。 $$
はPOSIXによって指定され、常に元のシェルプロセスの値のままです。 $BASHPID
はBash固有の変数であり、サブシェルを数えて、常に変数が逆参照されるプロセスの値です。
$ f() { printf '%s: %d, %d\n' "$1" $$ $BASHPID; };
$ ${BASH_VERSION+shopt -s lastpipe}; set +m;
$ f 1 >&2 | f 2
2: 31490, 31490
1: 31490, 32545
MkshのメンテナにBASHPID
を最新バージョンに追加するように説得したので、ある程度移植性があります。多くのプラットフォームで、ksh93にBASHPID
を自分で実装することも可能です。