子shell和PID:为什么$$和\ $ \ $有时在嵌套的sh -c下匹配?

时间:2011-08-31 12:35:49

标签: bash shell unix

我知道这是一个人为复杂的例子,但是为什么两个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

谢谢!

1 个答案:

答案 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. */