if -e和if -f之间的区别

时间:2012-04-18 07:07:51

标签: bash if-statement

我有一个简单的问题,但我找不到任何答案。 if条件有两个开关可以检查文件:-e-f

这两者有什么区别?

4 个答案:

答案 0 :(得分:59)

请参阅:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

我相信那些不是“if switch”,而是“测试开关”(因为你必须在[]括号内使用它们。

但区别在于:

[ -e FILE ]如果存在FILE,则为真。

这将为/etc/hosts/dev/null返回 true

[ -f FILE ]如果FILE存在且为常规文件,则为真。 这将为/etc/hosts返回 true ,为/dev/null返回 false (因为它不是常规文件)。

答案 1 :(得分:30)

$ man bash
       -e file
              True if file exists.
       -f file
              True if file exists and is a regular file.

常规文件不是目录/ symlink / socket / device等。

答案 2 :(得分:4)

-e检查任何类型的文件系统对象; -f 检查常规文件。

答案 3 :(得分:3)

if语句实际上使用程序'test'进行测试。你可以用两种方式写if语句:

if [ -e filename ];

if test -e filename;

如果你知道这一点,你可以轻松查看'test'的手册页,找出不同测试的含义:

man test