「オレリーのBASHポケットガイド」を読んでいます。それは言う:
現在の Bash プロセスのプロセス ID。場合によっては$$と異なる場合があります。
上記の説明は$BASHPID
変数を説明しています。
質問:どんな状況ですか?
答え1
BASHPID
bash マンページの説明に例を示します。
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
答え2
サブシェル。$$
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
BASHPID
私はmksh管理者にこれを最新バージョンに追加するように説得したので、移植性はやや優れています。また、BASHPID
多くのプラットフォームのksh93で直接実装することもできます。