Следует отметить, что $BASHPIDэто новинка для BASH 4. Если вы используете BASH 3.x, вы должны использовать$$
Бруно Броноски
Ответы:
19
Пример приведен в BASHPIDописании man-страницы bash:
BASHPIDExpands 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 $$) $$ $BASHPID25680169201692016920# | | | |# | | | -- $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 22:31490,314901:31490,32545
Мне удалось убедить сопровождающего mksh добавить BASHPIDв последнюю версию, так что он несколько переносим. Также можно реализовать BASHPIDksh93 самостоятельно на многих платформах.
$BASHPID
это новинка для BASH 4. Если вы используете BASH 3.x, вы должны использовать$$
Ответы:
Пример приведен в
BASHPID
описании man-страницы bash:Вот пример подоболочки, которая выводит содержимое переменной вместе с
$$
содержимымBASHPID
вне подоболочки.источник
Подоболочки.
$$
определяется POSIX и всегда остается значением исходного процесса оболочки.$BASHPID
является специфичной для Bash переменной и всегда является значением процесса, от которого переменная разыменовывается, считая подоболочки.Мне удалось убедить сопровождающего mksh добавить
BASHPID
в последнюю версию, так что он несколько переносим. Также можно реализоватьBASHPID
ksh93 самостоятельно на многих платформах.источник