Как получить идентификатор процесса подпроцесса bash в командной строке

Я знаю, что в bash мы можем создавать подоболочки, используя круглые скобки ( и ) . Согласно странице руководства bash:

(list) list  is  executed  in  a  subshell environment 

Также для получения идентификатора текущего процесса мы используем:

echo $$

Теперь мой вопрос заключается в том, как получить идентификатор процесса подоболочки, созданной с использованием ( и ) в командной строке?

Если я использую это:

echo $$; ( echo $$; ) 

Я получу идентификатор процесса родительской оболочки, напечатанный дважды на стандартный вывод, поскольку $$ расширяется еще до создания подоболочки. Так как же на самом деле заставить ленивое расширение?

[Решение должно работать и на Mac, а не только на Linux]

Обновление:

Предлагаемый связанный ответ не работает, поскольку echo $ BASHPID не работает на мой Mac и возвращается пустым.

30
задан anubhava 3 February 2012 в 18:24
поделиться