If-e 和 if-f 的区别

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

这两者有什么区别?

81895 次浏览
$ man bash


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

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

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

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

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

但区别在于:

如果文件存在,则为。

这将返回 /etc/hosts/dev/null以及目录的 没错

如果 FILE 存在并且是常规文件,则为 [ -f FILE ] True。 对于 /etc/hosts返回 没错,对于 /dev/null返回 假的(因为它不是常规文件) ,对于 /dev返回 假的,因为它是一个目录。

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

if [ -e filename ];

或者

if test -e filename;

如果你知道这一点,你可以很容易地检查手册页的“测试”,找出不同测试的含义:

man test