我最近发现 bashtest -e
不能使用循环符号链接。
ln -s ./test ./test
if [[ -e ./test ]]; then echo "exists"; fi
#this won't echo.
所以我需要用-L
then-e
来做到这一点
if [[ -L ./test || -e ./test ]]; then echo "exists"; fi
虽然这确实解决了我的问题,但我开始想知道是否还有其他-e
未涵盖的极端情况。
还有什么其他极端情况?有没有一种便携且简单的方法来可靠地检测文件是否存在?
答案1
问题不在于循环链接,而在于符号链接指向不存在的文件。每当您将符号链接指向任何不存在的文件时,都会发生同样的事情。
从test
手册页:
如果文件是符号链接,测试将完全取消引用它,然后根据引用的文件评估表达式,但 -h 和 -L 主选项除外。
test
这是其手册页中提到的唯一边缘情况。