$PWD vs. pwd regarding portability

前端 未结 5 1215
孤独总比滥情好
孤独总比滥情好 2021-02-07 06:00

I\'m writing a shell script which parses the path of the current working directory (printing a like of all basenames above the current directory).

So far, I\'ve been usi

5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-02-07 06:46

    POSIX requires $PWD to be set in the following fashion:

    PWD  
    

    This variable shall represent an absolute pathname of the current working directory. It shall not contain any components that are dot or dot-dot. The value is set by the cd utility, and by the sh utility during initialization.

    So you can rely on that being set – but do note "... an absolute path...", not the absolute path.

    bash (at least recent versions) will remember what symlinks you followed when setting $PWD (and the pwd builtin). command pwd (that is, the external command) will not. So you'll get different results there, which might, or might not, be important for you. Use pwd -P if you want a path without symlinks.

    Do note that the pwd documentation states:

    If an application sets or unsets the value of PWD, the behavior of pwd is unspecified.

    So, don't do that :)

    In short, there is no winner here. The environment variable will be there in POSIX shells, as will the external command and possibly a built-in too. Choose the one that best fits your need, the important thing being whether you care about symlinks or not.

提交回复
热议问题