Bash
bash 測試文件的可靠方法存在
我最近發現 bash
test -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
沒有涵蓋的角落案例。還存在哪些其他極端情況?是否有一種可移植且簡單的方法來可靠地檢測文件是否存在?
問題不在於循環連結,而是指向不存在文件的符號連結。每當您將符號連結指向任何不存在的文件時,都會發生同樣的事情。
從
test
手冊頁:如果 file 是符號連結,test 將完全取消引用它,然後根據引用的文件評估表達式,除了 -h 和 -L 主文件。
test
這是其手冊頁中提到的唯一邊緣情況。