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

时间:2019-07-14 17:07:17

标签: linux bash shell sh

当我给

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

为什么输出有差异?

2 个答案:

答案 0 :(得分:2)

您似乎正在使用当前正在运行的Shell的pid。最好用

echo $$  # which is a bash special variable

答案 1 :(得分:2)

正在发生的事情是$(...)语法启动了一个子外壳。因此,这些括号内的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为您提供了一个很好的解决方案,但我希望这个答案能帮助您了解正在发生的事情。