【发布时间】:2019-01-04 20:19:43
【问题描述】:
我想检查隐藏的.git 文件夹是否存在。第一个想法是使用:
if [ -d "~/.git" ]; then
echo "Do stuff"
fi
但-d 显然不查找隐藏文件夹。
【问题讨论】:
标签: bash double-quotes tilde-expansion
我想检查隐藏的.git 文件夹是否存在。第一个想法是使用:
if [ -d "~/.git" ]; then
echo "Do stuff"
fi
但-d 显然不查找隐藏文件夹。
【问题讨论】:
标签: bash double-quotes tilde-expansion
问题与波浪号在双引号内有关。
要扩展它,您需要将波浪号放在引号之外:
if [ -d ~/".git" ]; then # note tilde outside double quotes!
echo "Do stuff"
fi
或者,正如 hek2mgl 在下面评论的那样,使用 $HOME 而不是 ~:
if [ -d "$HOME/.git" ]
来自Tilde expansion中的POSIX:
“波浪号前缀”由单词开头的不带引号的字符组成,后跟单词中第一个不带引号的字符之前的所有字符,或者如果没有的话,则为单词中的所有字符。
来自Double Quotes中的POSIX:
用双引号 ( "" ) 括起来的字符应保留双引号内所有字符的字面值,但美元符号、反引号和反斜杠字符除外,如下所示:
您可以在 Unix 和 Linux 堆栈的 Why doesn't the tilde (~) expand inside double quotes? 中找到进一步的解释。
【讨论】: