Bash 为什么不是';t波浪号(~)在双引号内展开?

Bash 为什么不是';t波浪号(~)在双引号内展开?,bash,double-quotes,tilde-expansion,Bash,Double Quotes,Tilde Expansion,我想检查隐藏的.git文件夹是否存在。第一个想法是使用: if [ -d "~/.git" ]; then echo "Do stuff" fi 但是-d显然不查找隐藏的文件夹。问题在于波浪线位于双引号内 要将其展开,需要将波浪线置于引号之外: if [ -d ~/".git" ]; then # note tilde outside double quotes! echo "Do stuff" fi 或者,如hek2mgl在下面所评论的,使用$HOME而不是~: if [

我想检查隐藏的
.git
文件夹是否存在。第一个想法是使用:

if [ -d "~/.git" ]; then
   echo "Do stuff"
fi

但是
-d
显然不查找隐藏的文件夹。

问题在于波浪线位于双引号内

要将其展开,需要将波浪线置于引号之外:

if [ -d ~/".git" ]; then   # note tilde outside double quotes!
   echo "Do stuff"
fi
或者,如hek2mgl在下面所评论的,使用
$HOME
而不是
~

if [ -d "$HOME/.git" ]
从POSIX中:

“波浪号前缀”由单词开头的一个不带引号的字符组成,后跟单词中第一个不带引号的字符之前的所有字符,或者如果没有,则为单词中的所有字符

从POSIX中:

用双引号(“”)括起来的字符应保留双引号内所有字符的文字值,美元符号、反引号和反斜杠除外,如下所示:

您可以在Unix和Linux堆栈的中找到进一步的解释