Es sollte beachtet werden, dass $BASHPIDBASH 4 neu ist. Wenn Sie BASH 3.x verwenden, müssen Sie$$
Bruno Bronosky
Antworten:
19
Ein Beispiel finden Sie in der BASHPIDBeschreibung der Bash-Manpage:
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.
Hier ist ein Beispiel für eine Unterschale, die den Inhalt der Variablen zusammen mit $$und den Inhalt BASHPIDaußerhalb der Unterschale ausgibt.
$ echo $(echo $BASHPID $$) $$ $BASHPID
25680169201692016920# | | | |# | | | -- $BASHPID outside of the subshell# | | -- $$ outside of the subshell# | -- $$ inside of the subshell# -- $BASHPID inside of the subshell
Unterschalen. $$wird von POSIX angegeben und bleibt immer der Wert des ursprünglichen Shell-Prozesses. $BASHPIDist eine Bash-spezifische Variable und ist immer der Wert des Prozesses, von dem die Variable dereferenziert wird, wobei Unterschalen gezählt werden.
$ f(){ printf '%s: %d, %d\n'"$1" $$ $BASHPID;};
$ ${BASH_VERSION+shopt -s lastpipe};set+m;
$ f 1>&2| f 22:31490,314901:31490,32545
Ich habe es geschafft, den mksh-Betreuer davon zu überzeugen BASHPID, die neueste Version hinzuzufügen , so dass es etwas portabel ist. Es ist auch möglich, BASHPIDksh93 selbst auf vielen Plattformen zu implementieren .
$BASHPID
BASH 4 neu ist. Wenn Sie BASH 3.x verwenden, müssen Sie$$
Antworten:
Ein Beispiel finden Sie in der
BASHPID
Beschreibung der Bash-Manpage:Hier ist ein Beispiel für eine Unterschale, die den Inhalt der Variablen zusammen mit
$$
und den InhaltBASHPID
außerhalb der Unterschale ausgibt.quelle
Unterschalen.
$$
wird von POSIX angegeben und bleibt immer der Wert des ursprünglichen Shell-Prozesses.$BASHPID
ist eine Bash-spezifische Variable und ist immer der Wert des Prozesses, von dem die Variable dereferenziert wird, wobei Unterschalen gezählt werden.Ich habe es geschafft, den mksh-Betreuer davon zu überzeugen
BASHPID
, die neueste Version hinzuzufügen , so dass es etwas portabel ist. Es ist auch möglich,BASHPID
ksh93 selbst auf vielen Plattformen zu implementieren .quelle