我有一个简单的问题,但我找不到任何答案。 if条件有两个开关可以检查文件:-e
和-f
。
这两者有什么区别?
答案 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