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

标签 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

为什么输出有差异?

最佳答案

发生的事情是 $(...) 语法启动了一个子 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/

相关文章:

regex - awk 是在日志文件中搜索日期/时间范围的最快方法吗?

windows - 如何从 Windows 反编译 Linux 二进制文件?

mysql - 如何以 json 格式导出所有具有从所述日期到所述日期的对话表的数据库

bash printf 换行

windows - 在 Windows 中以编程方式创建 shell 脚本并通过 cygwin 在 Linux 系统上运行它?

linux - 如何从 VM 克隆 Git 存储库?

linux - Rsync 不传输更改

linux - 在应用 websocket 示例时,为什么 sha1sum 会打印出不同的结果?

linux - 如何在 Bash 脚本条件表达式中测试 A 是否不等于 B 或 C

Git Hook - 预提交 - 问题 - exec 后不执行