Server Fault is a question and answer site for system and network administrators. 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

When I use these shell commands:

[root@linux /tmp]# a=$$
[root@linux /tmp]# echo $a

where does the value 3985 come from? And why?

share|improve this question
Notice that using $$ for generating temp file names have poor security implications. – hlovdal Aug 15 '11 at 9:00
up vote 10 down vote accepted
man bash

explains it.

Expands to the process ID of the shell.  In a () subshell, 
it expands to the  process ID of the current shell, not the subshell.
share|improve this answer

$$ is the pid of the current process


host@controller:~$ echo $$
host@controller:~$ ps -p 12481
  PID TTY          TIME CMD
12481 pts/2    00:00:01 bash

Since we execute echo $$ in bash, we get it's current pid

know also

echo $? is the return code of the last executed command.

$# is the number of arguments

$* is the list of arguments passed to the current process

$[1 or 2 or ... n] value of each corresponding argument

share|improve this answer

That's why some people use it to construct a filename that's only used temporarily and then destroyed, as in this script fragment.

SCRATCHFILE=/tmp/emphemeral.$$ ;
# Now have the script write to and read from the temp file

As mentioned above, the $$ in the filename will be the PID of the main script.

share|improve this answer
You should use mktemp for this. – Mircea Vutcovici Feb 6 '12 at 20:11

Try "echo $$" you will get the answer.

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.