bash if -f 在主目录中

bash if -f 在主目录中

我尝试确定给定路径是否指向文件或目录。我用以下代码尝试了这一点:

#if $mypath is a file
if [[ -f $mypath ]]; then

#if mypath is a directory
if [[ -d $mypath ]]; then

当给定路径是绝对路径时,这两个片段都工作正常,例如 /home/user/mydir/... 但是当给定路径以 ~ 开头时,例如 ~/mydir/... 这两个片段都将返回 true ,无论路径是否指向文件或目录。

有谁知道我缺少什么,或者是否有可能?

答案1

我发现了问题。

问题是,我从配置文件中获取路径,因此路径被保存为字符串。通过这一点,波形符未扩展,这就是问题的原因。我的解决方法是手动用 $HOME 替换波形符,即使路径被引用,它也会被扩展。所以基本上:

mypath="${mypath/#\~/$HOME}"
#if $mypath is a file
if [[ -f $mypath ]]; then

相关内容