Bash 测试文件是否存在的可靠方法

Bash 测试文件是否存在的可靠方法

我最近发现 bashtest -e不能使用循环符号链接。

ln -s ./test ./test
if [[ -e ./test ]]; then echo "exists"; fi
#this won't echo.

所以我需要用-Lthen-e来做到这一点

if [[ -L ./test || -e ./test ]]; then echo "exists"; fi

虽然这确实解决了我的问题,但我开始想知道是否还有其他-e未涵盖的极端情况。

还有什么其他极端情况?有没有一种便携且简单的方法来可靠地检测文件是否存在?

答案1

问题不在于循环链接,而在于符号链接指向不存在的文件。每当您将符号链接指向任何不存在的文件时,都会发生同样的事情。

test手册页:

如果文件是符号链接,测试将完全取消引用它,然后根据引用的文件评估表达式,但 -h 和 -L 主选项除外。

test这是其手册页中提到的唯一边缘情况。

相关内容