无法测试Bash中是否存在文件

无法测试Bash中是否存在文件,bash,tilde-expansion,Bash,Tilde Expansion,考虑以下Bash脚本: function dosomething { local fname="~/.bash_profile" if [[ -f "$fname" ]]; then echo "proceeding" else echo "skipping" fi } dosomething 虽然我知道~/.bash_配置文件存在,但我总是被“跳过”。为什么?~只有在shell没有引号的情况下才由shell展开。当它被引用时,

考虑以下Bash脚本:

function dosomething {
    local fname="~/.bash_profile"
    if [[ -f "$fname" ]]; then
        echo "proceeding"
    else
        echo "skipping"
    fi
}

dosomething

虽然我知道~/.bash_配置文件存在,但我总是被“跳过”。为什么?

~
只有在shell没有引号的情况下才由shell展开。当它被引用时,它是一个文字波浪符号

local fname=~/.bash_profile

~
只有在shell没有引号时才由shell展开。当它被引用时,它是一个文字波浪符号

local fname=~/.bash_profile

谢谢我将使用
'local fname=“/Users/$(whoami)/.bash_profile”
。这似乎比简单地取消引用
~
要复杂得多。此外,从技术上讲,它假设用户的主目录在哪里,但这不一定是真的。如果您不想使用
~
,请使用
$HOME
。谢谢!我将使用
'local fname=“/Users/$(whoami)/.bash_profile”
。这似乎比简单地取消引用
~
要复杂得多。此外,从技术上讲,它假设用户的主目录在哪里,但这不一定是真的。如果您不想使用
~
,请使用
$HOME