背景
这篇[文章]说:
命令替换扩展到命令的输出。这些命令在子shell中执行..
但是 bash 手册subshell
在其命令替换部分中没有提及 a 。
我的测试如下
$ ps
PID TTY TIME CMD
26483 pts/25 00:00:00 bash
26866 pts/25 00:00:00 ps
$ hpid="$(ps | grep bash)"
$ echo "$hpid"
26483 pts/25 00:00:00 bash
26899 pts/25 00:00:00 bash
显示在命令替换期间生成了一个 pid 为 26899 的新 shell。此时我更改了PATH
环境变量。
$ PATH="/some/rogue/path"
做了以下事情:
VAR="$(echo "Do|Die" | cut -d"|" -f 2)"
并得到以下错误:
Command 'cut' is available in '/usr/bin/cut'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
cut: command not found
我知道该错误是由于修改了 PATH 环境变量,这有助于 shell 定位二进制文件。但是,当我与命令替换一起阅读本文时,我感到很困惑。
如果通过$(..)
子shell 生成,那么 PATH 环境变量应该是完整的并且应该指向二进制文件(cut
在这种情况下),因此 bash 不应该抱怨它无法找到cut
二进制文件。
问题
PATH
这里的命令替换是如何修改的?