bash - 将文件的绝对路径存储在变量中

bash - storing absolute path to a file inside a variable

我想知道为什么

[ -d ~/dir ] ; echo $?

确实returns0,如果dir存在并且是一个目录,但是

DIR="~/dir" ; [ -d "${DIR}" ] ; echo $?

总是returns 1.

echo "${DIR}"

打印 ~/dir,正如预期的那样。我得到了一个包含另一个文件路径的文本文件,我想我会使用 cat 将内容存储在一个变量中。执行此操作的正确方法是什么?

波浪号扩展发生在变量扩展之前,请参阅 man bash 中的 EXPANSION。 ~ 不是真实路径,它被 shell 扩展为真实路径,但存储在变量中的路径不会发生这种情况。而是将真正的完整路径存储在变量中。

不是真正的 bash 解决方案,但您可以这样做:

DIR="~/dir" ;

#expand the tilde
DIR=$(python -c "import os;print(os.path.expanduser('${DIR}'));");

[ -d "${DIR}" ] ; echo $?

DIR = "$HOME/dir" 可以正常工作。