$BASHPIDと$$は場合によって異なります。

$BASHPIDと$$は場合によって異なります。

「オレリーのBASHポケットガイド」を読んでいます。それは言う:

現在の Bash プロセスのプロセス ID。場合によっては$$と異なる場合があります。

上記の説明は$BASHPID変数を説明しています。

質問:どんな状況ですか?

答え1

BASHPIDbash マンページの説明に例を示します。

   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 で指定され、常に元のシェルプロセスの値を保持します。$BASHPIDBash 関連変数であり、常に変数を逆参照したプロセスの値 (サブシェル計算)。

 $ 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で直接実装することもできます。

関連情報