回答:
例は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
サブシェル。$$
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
最新バージョンに追加するように説得できたので、多少移植性があります。BASHPID
多くのプラットフォームで自分でksh93 を実装することも可能です。
$BASHPID
BASH 4. BASH 3.xを使用している場合は、新規にあり、あなたが使用する必要があります$$