Difference between 'if -e' and 'if -f'

前端 未结 4 1256
南笙
南笙 2020-12-24 04:34

There are two switches for the if condition which check for a file: -e and -f.

What is the difference between those two?

相关标签:
4条回答
  • 2020-12-24 05:18

    See: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

    I believe those aren't "if switches", rather "test switches" (because you have to use them inside [] brackets.

    But the difference is:

    [ -e FILE ] True if FILE exists.

    This will return true for both /etc/hosts and /dev/null and for directories.

    [ -f FILE ] True if FILE exists and is a regular file. This will return true for /etc/hosts and false for /dev/null (because it is not a regular file), and false for /dev since it is a directory.

    0 讨论(0)
  • 2020-12-24 05:20

    -e checks for any type of filesystem object; -f only checks for a regular file.

    0 讨论(0)
  • 2020-12-24 05:31

    The if statement actually uses the program 'test' for the tests. You could write if statements two ways:

    if [ -e filename ];
    

    or

    if test -e filename;
    

    If you know this, you can easily check the man page for 'test' to find out the meanings of the different tests:

    man test
    
    0 讨论(0)
  • 2020-12-24 05:34
    $ man bash
    
           -e file
                  True if file exists.
           -f file
                  True if file exists and is a regular file.
    

    A regular file is something that isn't a directory, symlink, socket, device, etc.

    0 讨论(0)
提交回复
热议问题