$ BASHPIDと$$は異なる場合があります


10

「オレイリーのBASHポケットガイド」を読んでいます。と言いました:

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

上記の説明では、$BASHPID変数について説明しました。

質問:どのケースですか?


1
これは、ことに留意すべきである$BASHPIDBASH 4. BASH 3.xを使用している場合は、新規にあり、あなたが使用する必要があります$$
ブルーノBronosky

回答:


19

例は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

14

サブシェル。$$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

私はなんとかmkshメンテナにBASHPID最新バージョンに追加するように説得できたので、多少移植性があります。BASHPID多くのプラットフォームで自分でksh93 を実装することも可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.