if
ファイルをチェックする条件には、との2つのスイッチがあり-e
ます-f
。
これら2つの違いは何ですか?
参照:http ://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
これらは「ifスイッチ」ではなく、「テストスイッチ」であると思います([]括弧内で使用する必要があるためです。
しかし、違いは次のとおりです。
[ -e FILE ]
FILEが存在する場合はTrue。
これは、ディレクトリとディレクトリの両方に対してtrueを返します。/etc/hosts
/dev/null
[ -f FILE ]
FILEが存在し、通常のファイルである場合はTrue。これは、(通常のファイルではないため)の場合はtrue、for/etc/hosts
の場合はfalseを返し、ディレクトリであるための場合はfalseを返します。/dev/null
/dev
$ man bash
-e file
True if file exists.
-f file
True if file exists and is a regular file.
通常のファイルとは、ディレクトリ、シンボリックリンク、ソケット、デバイスなどではないものです。
ifステートメントは、実際にはプログラム「test」をテストに使用します。ifステートメントは次の2つの方法で記述できます。
if [ -e filename ];
また
if test -e filename;
これを知っている場合は、「test」のマニュアルページを簡単にチェックして、さまざまなテストの意味を見つけることができます。
man test
-e
任意のタイプのファイルシステムオブジェクトをチェックします。通常のファイル-f
のみをチェックします。