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これが私の問題を解決している間、私が扱っていない他の特別なケースがあるかどうか疑問になり始めました。

またどんな極端な場合がありますか?ファイルが存在するかどうかを確実に検出できる移植可能で簡単な方法はありますか?

答え1

問題は循環リンクにあるのではなく、存在しないファイルを指すシンボリックリンクにあります。存在しないファイルへのシンボリックリンクを指すたびに、同じことが起こります。

testマニュアルページから:

ファイルがシンボリックリンクの場合、テストはそのファイルを完全に逆参照してから、-hおよび-Lの主なオプションを除いて参照されたファイルの式を評価します。

testこれは、マニュアルページに記載されている唯一の例外的なケースです。

関連情報