2012-04-18 513 views
21

我有一个简单的问题,但找不到任何答案。 if条件有两个开关用于检查文件,-e和-f。这两者有什么区别?if -e和if -f之间的区别

+0

@jww这是一个关于bash脚本中的if块的问题 - 它可能不是一种编程语言,但我肯定不会把它叫做主题。 – Ahatius 2016-06-23 13:20:12

+0

够公平的。你有这样的标签;所以你把它转向编程,而不是“如何使用这个命令”。缩回。 – jww 2016-06-23 15:57:34

回答

34

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

我认为这些都不是“如果开关”,而“测试开关”(因为你必须使用它们的内部括号[]

但不同的是:

如果FILE存在

[ -e FILE ]真。

这将返回真正两个/etc/hosts/dev/null

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

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

一个普通文件的东西,不是目录/符号链接/插座/装置等

+0

感谢您的回答。猜测这意味着为-f要成为真实的,你必须参考一个文件,这不是一个链接或类似的东西? – Ahatius 2012-04-18 07:12:43

+0

是的。它们通常在ls -l输出的第一个字符中有一个'-'。 – jman 2012-04-18 07:13:39

+0

好的,非常感谢! – Ahatius 2012-04-18 07:14:16

3

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

1

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

if [ -e filename ]; 

if test -e filename; 

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

man test 
相关问题