当我给予
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
为什么输出有差异?
最佳答案
发生的事情是 $(...)
语法启动了一个子 shell。因此,这些括号内的 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 给了你一个很好的解决方案,但我希望这个答案有助于理解正在发生的事情。
关于linux - 为什么当我直接打印此代码并存储在变量中后,输出会有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029492/