68

if检查文件的条件有两个开关:-e-f.

这两者有什么区别?

4

4 回答 4

95

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

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

但不同的是:

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

这对于目录和目录都将返回true/etc/hosts/dev/null

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

于 2012-04-18T07:18:05.850 回答
49
$ man bash

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

常规文件不是目录、符号链接、套接字、设备等。

于 2012-04-18T07:10:19.047 回答
6

if 语句实际上使用程序“test”进行测试。您可以通过两种方式编写 if 语句:

if [ -e filename ];

或者

if test -e filename;

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

man test
于 2012-04-18T08:22:39.733 回答
5

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

于 2012-04-18T07:11:22.720 回答