为什么当我直接打印此代码并在存储在变量中后时,我的输出会有所不同



当我给

ps -aux|grep -w 'bash'|grep -v 'grep'|awk '{print $2}'

我得到输出:

32356 

也当我给

echo $(ps -aux|grep -w 'bash'|grep -v 'grep'|awk '{print $2}')

我得到输出:

32356 32551

为什么输出有差异?

正在发生的事情是$(...)语法启动一个子外壳。因此,这些括号内的 ps 命令将找到您当前的 shell(您可以使用 $$ 获得,正如@tink所说的他们的答案(和括号调用的子 shell。

使用ps fux和重新配置文件,您可以确切地看到正在发生的事情:

ps fux | grep -w bash > a
cat a
me  11603  0.1  0.0 114408  3728 pts/1    Ss   13:37   0:00  _ -bash
me  11955  0.0  0.0 103348   872 pts/1    S+   13:41   0:00      _ grep -w bash
echo $(ps fux | grep -w bash > b)
cat b
me  11603  0.1  0.0 114408  3728 pts/1    Ss+  13:37   0:00  _ -bash
me  11981  0.0  0.0 114408  2304 pts/1    S+   13:41   0:00      _ -bash
me  11983  0.0  0.0 103348   872 pts/1    S+   13:41   0:00          _ grep -w bash

虽然@tink给了你一个很好的解决方案,但我希望这个答案有助于理解正在发生的事情。

看起来您正在追逐当前正在运行的 shell 的pid。 这是最好的实现

echo $$  # which is a bash special variable

相关内容

最新更新