Bash

bash 測試文件的可靠方法存在

  • March 6, 2017

我最近發現 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沒有涵蓋的角落案例。

還存在哪些其他極端情況?是否有一種可移植且簡單的方法來可靠地檢測文件是否存在?

問題不在於循環連結,而是指向不存在文件的符號連結。每當您將符號連結指向任何不存在的文件時,都會發生同樣的事情。

test手冊頁:

如果 file 是符號連結,test 將完全取消引用它,然後根據引用的文件評估表達式,除了 -h 和 -L 主文件。

test這是其手冊頁中提到的唯一邊緣情況。

引用自:https://unix.stackexchange.com/questions/349389