Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm reading "BASH pocket guide of Oreilly". It said:

The process ID of the current Bash process. In some cases, this can differ from $$.

Above explanation , explained $BASHPID variable.

Question: which cases?

share|improve this question
up vote 6 down vote accepted

An example is provided in the BASHPID description of the bash manpage:

          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.

Here is an example of a subshell outputting the contents of the variable, along with $$ and the contents of BASHPID outside of the subshell.

$ echo $(echo $BASHPID $$) $$ $BASHPID
25680 16920 16920 16920
share|improve this answer

Subshells. $$ is specified by POSIX and always remains the value of the original shell process. $BASHPID is a Bash-specific variable, and is always the value of the process from which the variable is dereferenced, counting subshells.

 $ 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

I did manage to convince the mksh maintainer to add BASHPID to the most recent version, so it is somewhat portable. It is also possible to implement BASHPID in ksh93 yourself on many platforms.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.