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

Swi*_*ing 5 bash tilde-expansion double-quotes

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

if [ -d "~/.git" ]; then
   echo "Do stuff"
fi
Run Code Online (Sandbox Code Playgroud)

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

fed*_*qui 9

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

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

if [ -d ~/".git" ]; then   # note tilde outside double quotes!
   echo "Do stuff"
fi
Run Code Online (Sandbox Code Playgroud)

或者,或者,如下面由hek2mgl评论,请使用$HOME而不是~:

if [ -d "$HOME/.git" ]
Run Code Online (Sandbox Code Playgroud)

来自POSIX in Tilde扩展:

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

来自POSIX的双引号:

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

你可以找到进一步的解释为什么波形符号(〜)不会在双引号内展开?来自Unix和Linux堆栈.

  • 好答案!或者可以使用"$ {HOME}/.git". (2认同)