man bash
explica isso.
Expands to the process ID of the shell. In a () subshell,
it expands to the process ID of the current shell, not the subshell.
Quando utilizo estes comandos da shell:
[root@linux /tmp]# a=$$
[root@linux /tmp]# echo $a
3985
de onde vem o valor 3985? E por quê?
$$ é o pid do processo atual
tente
host@controller:~$ echo $$ 12481 host@controller:~$ ps -p 12481 PID TTY TIME CMD 12481 pts/2 00:00:01 bash host@controller:~$
Como executamos echo $$
no bash, obtemos seu pid atual
saiba também
echo $? é o código de retorno do último comando executado.
$ # é o número de argumentos
$ * é a lista de argumentos passados para o processo atual
$ [1 ou 2 ou ... n] valor de cada argumento correspondente
É por isso que algumas pessoas o usam para construir um nome de arquivo que é usado apenas temporariamente e depois destruído, como neste fragmento de script.
SCRATCHFILE=/tmp/emphemeral.$$ ;
# Now have the script write to and read from the temp file
rm $SCRATCHFILE ;
Como mencionado acima, o $$ no nome do arquivo será o PID do script principal.
Experimente "echo $$" para obter a resposta.