【问题标题】:Is the environmental variable PWD always defined in Linux?环境变量 PWD 是否总是在 Linux 中定义?
【发布时间】:2019-03-15 21:16:54
【问题描述】:

问题:Linux下环境变量PWD是否总是独立于命令shell定义的(忽略非命令shell)?换句话说,像“ls $PWD”这样的命令会一直运行吗?

【问题讨论】:

  • 我不知道任何称为“PMD”的标准环境变量。你的意思是“残疾人”吗?
  • 是的,对不起,我的意思是 PWD。我已经纠正了这一点。谢谢
  • 我宁愿依赖pwdpwd -P 命令的输出。如ls $(pwd)
  • @Tanktalus pwd -P 确实很有用,但是对于ls $(pwd),如果当前目录包含空格或其他特殊字符,除非你这样做ls "$(pwd)"
  • @Tanktalus, ls "$(pwd)" 执行起来比ls "$PWD" 慢得多——前者需要一个子shell(因此,需要创建一个管道对和一个fork() in bash)才能获得输出pwd 在子进程中运行的副本;在后者中,唯一的子进程是ls 本身的副本。

标签: linux shell environment-variables


【解决方案1】:

符合 Posix 的 shell 将设置此环境变量。在http://pubs.opengroup.org/onlinepubs/009604599/utilities/cd.html中寻找PWD

密码 该变量应按照说明中的规定进行设置。如果应用程序设置或取消设置 PWD 的值,则 cd 的行为是 未指定。

http://pubs.opengroup.org/onlinepubs/009604599/utilities/xcu_chap02.html 中的第 2.5.3 节“Shell 变量”

变量应该从环境中初始化...如果一个变量 从环境中初始化,应标记为导出 马上

密码 由shell设置为当前工作目录的绝对路径名,

【讨论】:

  • 是的,这就是我正在寻找的答案。谢谢。
【解决方案2】:

环境变量PWD在Linux下是否总是独立于命令shell定义的?

不,我不明白为什么会这样,因为PWD 变量会在使用cd 命令后自动更新(在shell 初始化时和),这正是一个shell 内置命令

可以找到关于PWD 的相关文档,例如在:

下面是一个示例 Bash 会话,用于举例说明 PWDcd 之间的链接:

/$ echo "$SHELL"
/bin/bash
/$ echo "$PWD"
/
/$ cd usr/bin/
/usr/bin$ echo "$PWD"
/usr/bin

换句话说,像ls $PWD 这样的命令会一直运行吗?

实际上,$PWD 语法对应于 shell parameter expansion,因此如果没有 shell,ls $PWD 就无法正确计算。

顺便说一句:强烈建议双引号你的shell变量,在这种情况下写ls "$PWD",以避免变量包含空格或其他特殊字符时出现问题。

【讨论】:

  • 它也是在shell初始化时设置的,所以不需要先发出cd
  • @thatotherguy 确实,我已经编辑了我的答案以添加您的评论。
猜你喜欢
  • 2021-12-14
  • 2011-04-08
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2011-03-30
  • 2014-05-26
相关资源
最近更新 更多