Clark J. Wang wrote:
Running a cmd in background (by &) would not create subshell. Simple testing:#!/bin/bash function foo() { echo $$ } echo $$ foo & ### END OF SCRIPT ### The 2 $$s output the same.
This doesn't mean that it doesn't create a subshell. It creates one, since it can't replace your foreground process.
It just shows that $$ does what it should do, it reports the relevant PID of the parent ("main") shell you use. As far as I can see, this applies to all kinds of subshells like
- explicit ones (...) - pipeline components - command substitution - process substitution - async shells (like above, running your function) - ... J.
