我知道这是一个人为复杂的例子,但是为什么两个PID在第一行中是相同的,而(正如预期的那样,至少对我来说)另外两行产生不同的PID?
$ sh -c 'sh -c "echo $$ \$\$"'
4500 4500
$ sh -c 'sh -c "echo $$ \$\$"; true'
4596 5060
$ sh -c 'true; sh -c "echo $$ \$\$"'
4728 2868
谢谢!
答案 0 :(得分:1)
对于我在bash 4.1.5中,第一行的输出是:
sh -c 'sh -c "echo $$ \$\$"'
4063 4064
正如所料 - 价值观不同。 还在ash,sh和zsh上进行了测试。
必须进行一些棘手的优化。
<强>更新强>
在bash 3.2中有“ONESHOT”功能: 请参阅shell.c:1243中的评论:
#if defined (ONESHOT)
/* Run one command, given as the argument to the -c option. Tell
parse_and_execute not to fork for a simple command. */