$$
дает идентификатор процесса процесса сценария при использовании в сценарии, например:
Пример 1
#!/bin/bash
# processid.sh
# print process ids
ps -o cmd,pid,ppid
echo "The value of \$\$ is $$"
$ ./processid.sh
CMD PID PPID
bash 15073 4657
/bin/bash ./processid.sh 15326 15073
ps -o cmd,pid,ppid 15327 15326
The value of $$ is 15326
Соблюдайте pid, заданный $$
и ps
is 15326
Моя подсказка оболочки pid 15073
Но в подоболочке $$
дает pid родительской оболочки (которая равна 15073)
Пример 2
$ ( ps -o cmd,pid,ppid ; echo $$ )
CMD PID PPID
bash 15073 4657
bash 15340 15073
ps -o cmd,pid,ppid 15341 15340
15073
Здесь subshell - это pid 15340
Вопрос: почему так?Разве скрипт не работает в подоболочке?В чем разница между подоболочкой в примере 2 и оболочкой, в которой скрипт запускается в примере 1?