为什么不在双引号内扩展(〜)?

时间:2017-01-26 10:38:09

标签: bash double-quotes tilde-expansion

我想检查隐藏的.git文件夹是否存在。首先想到的是使用:

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

-d显然不会寻找隐藏文件夹。

1 个答案:

答案 0 :(得分:7)

问题与波形符在双引号内有关。

要扩展它,您需要将波形符号放在引号之外:

if [ -d ~/".git" ]; then   # note tilde outside double quotes!
   echo "Do stuff"
fi

或者,或者如下面hek2mgl所述,请使用$HOME代替~

if [ -d "$HOME/.git" ]

来自Tilde expansion中的POSIX:

  

A"代字号前缀"由一个单词开头的不带引号的字符组成,后面是单词中第一个未引用的字符之前的所有字符,或者如果没有单词中的所有字符。

来自Double Quotes中的POSIX:

  

用双引号括起字符("")应保留双引号内所有字符的字面值,但字符美元符号,反引号和反斜杠除外,如下所示:

您可以在Unix&amp ;;的Why doesn't the tilde (~) expand inside double quotes?中找到进一步的解释。 Linux Stack。