При использовании обратных галочек (или более современного синтаксиса $(...)
для подстановки команд) вы создаете подоболочку. Это fork()
независимая копия процесса оболочки, имеющая собственный PID, поэтому pgrep
находит две отдельные копии оболочки. (Более того, pgrep
может находить копии bash, работающие в системе, совершенно не связанные с текущим сценарием).
Если вы хотите найти PID текущей копии bash, вы можете просто найти его напрямую (printf
лучше, чем echo
, когда содержимое может содержать обратную косую черту или если поведение echo -n
или нестандартное расширение bash echo -e
необходимо, но ни одна из этих вещей здесь не подходит, поэтому echo
хорошо):
echo "Current bash PID is $$"
Обратите внимание, что даже при выполнении в подоболочке $$
расширяется до PID родительской оболочки. В bash 4.0 или новее вы можете использовать $BASHPID
для поиска текущего PID даже в подоболочке.
См. Связанный вопрос Bash - два процесса для одного скрипта