$ PWD与pwd关于可移植性

hel*_*hod 15 bash

我正在编写一个shell脚本,它解析当前工作目录的路径(打印当前目录上方的所有基本名称).

到目前为止,我一直在使用环境变量PWD来解析路径,但我想知道是否

  • 我可以指望PWD永远定下来
  • 在每个平台上给出相同的结果

使用pwdshell-builtin 可能会更好吗?我需要这个脚本在尽可能多的平台上运行,所以我只是想知道......

Mat*_*Mat 24

POSIX需要$PWD以下列方式设置:

PWD  
Run Code Online (Sandbox Code Playgroud)

此变量应表示当前工作目录的绝对路径名.它不应包含任何点或点的组件.该值由cd实用程序设置,在初始化期间由sh实用程序设置.

所以,你可以依靠的存在集-但是,请注意"......绝对路径...",而不是绝对路径.

bash(至少最新版本)会记住你在设置$PWD(和pwd内置)时遵循的符号链接.command pwd(即外部命令)不会.所以你会得到不同的结果,这可能对你很重要,也可能不重要.pwd -P如果您想要一个没有符号链接的路径,请使用.

请注意pwd文档说明:

如果应用程序设置或取消设置PWD的值,则未指定pwd的行为.

所以,不要那样做:)

简而言之,这里没有赢家.环境变量将存在于POSIX shell中,外部命令也可能存在,也可能是内置命令.选择最适合您需求的那个,重要的是您是否关心符号链接.