Swi*_*ing 5 bash tilde-expansion double-quotes
我想检查隐藏.git文件夹是否存在.首先想到的是使用:
if [ -d "~/.git" ]; then
echo "Do stuff"
fi
Run Code Online (Sandbox Code Playgroud)
但-d显然不会寻找隐藏的文件夹.
问题与波形符在双引号内有关.
要扩展它,您需要将波形符号放在引号之外:
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堆栈.