是的,您可以调用的大多数东西都会期望经过该习语的路径。当您在 shell 中使用类似的路径时(例如,当您执行类似的操作时cat ~raxacoricofallapatorius/foo.txt
),是shell 本身- 而不是cat
您可能运行的任何其他程序 - 执行路径规范化。
您可以简单地验证这一点 - 例如,
lvc@tiamat:~/Projects$ echo ~
/home/lvc
所以这确实意味着,如果您希望获得以这些变量作为输入的路径,您将需要自己进行预处理。另一种方法是通过 shell 运行命令,并准备好处理带来的所有问题。
但是,至少在类 unix 系统上(Windows 的行为方式可能相同,也可能不同),您不需要这样做- 系统调用可以理解这些,.
并且..
shell 不会转换它们 - 所以,例如:
lvc@tiamat:~/Projects$ file ..
..: directory
lvc@tiamat:~/Projects$ file ~
/home/lvc: directory
请注意file
看到..
不变,但看到 的扩展形式~
。
这意味着,如果您想要的只是可以直接在外部程序中工作的路径,那么通过它expanduser
并且可能expandvars
就足够了。如果您要调用abspath
的程序将在与您的工作目录不同的工作目录中运行,您将主要需要调用。