【问题标题】:Why isn't tilde (~) expanding inside double quotes? [duplicate]为什么波浪号 (~) 不在双引号内展开? [复制]
【发布时间】:2019-01-04 20:19:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: bash double-quotes tilde-expansion


    【解决方案1】:

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

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

    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? 中找到进一步的解释。

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 2011-05-02
      • 2011-08-23
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多