命令替换和$ PATH变量

我是

背景

这篇文章说:

命令替换扩展为命令的输出。这些命令在子shell中执行

但是bash手册subshell在其命令替换部分中什么都没有说

我的测试如下

$ 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生成,则PATH环境变量应完整无缺,并且应指向二进制文件(cut在这种情况下),因此bash不应抱怨它无法找到cut二进制文件。

问题

修改修改对PATH这里的命令替换有何影响?

二十烷

考虑以下示例:

$ export PS1='\$\$=$$ \$ '
$$=30862 $ a=123 # Note: No export a here.
$$=30862 $ echo $a
123
$$=30862 $ bash
$$=31133 $ echo $a # Subshell explicitly created does not have it.

$$=31133 $ exit
$$=30862 $ echo $(eval 'echo $a') # This subshell however does inherit it. The single quote ensures that this is not evaluated by parent shell.
123                               # echo $(echo $a) would probably cause $a to be evaluated by parent shell.
$$=30862 $

简而言之,$(...)即使未导出变量,由子程序生成的子外壳程序也将继承与父外壳程序相同的环境。(甚至$$与父shell相同。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

命令替换和$ PATH变量

来自分类Dev

将带引号,命令替换和变量的代码写入文件

来自分类Dev

Makefile,内置方括号,变量扩展和命令替换

来自分类Dev

Linux命令变量替换

来自分类Dev

用变量替换命令?

来自分类Dev

命令中的Shell变量替换

来自分类Dev

bash 命令中的变量替换

来自分类Dev

使用变量-Path参数运行Powershell命令

来自分类Dev

命令行OSX:配置PATH变量

来自分类Dev

使用PATH创建命令行变量

来自分类Dev

在PATH环境变量中包含命令

来自分类Dev

NPM脚本-配置变量和命令替换在package.json中不起作用

来自分类Dev

如何在bash中使用正则表达式变量进行查找和替换命令?

来自分类Dev

路径和PATH环境变量

来自分类Dev

环境变量和PATH问题

来自分类Dev

如何在环境变量PATH中搜索和替换字符串?

来自分类Dev

如何在批处理文件中的变量中查找和替换%PATH%系统变量中的字符串?

来自分类Dev

有关虚拟环境,PATH变量和命令行的问题

来自分类Dev

在命令替换中对变量进行报价处理

来自分类Dev

关于bash命令与变量替换的困惑

来自分类Dev

bash命令替换期间的空白变量

来自分类Dev

bash变量评估中的命令替换

来自分类Dev

没有调用命令的变量替换

来自分类Dev

声明变量时防止命令替换运行

来自分类Dev

在 Python 中的命令中替换变量

来自分类Dev

远程SSH和变量替换

来自分类Dev

LabVIEW变量查找和替换

来自分类Dev

Docker Run和变量替换

来自分类Dev

bash变量替换和引用