if
检查文件的条件有两个开关:-e
和-f
.
这两者有什么区别?
请参阅: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/hosts
和false for /dev/null
(因为它不是常规文件),并且false for/dev
因为它是一个目录。
$ man bash
-e file
True if file exists.
-f file
True if file exists and is a regular file.
常规文件不是目录、符号链接、套接字、设备等。
if 语句实际上使用程序“test”进行测试。您可以通过两种方式编写 if 语句:
if [ -e filename ];
或者
if test -e filename;
如果您知道这一点,您可以轻松地查看“test”的手册页以找出不同测试的含义:
man test
-e
检查任何类型的文件系统对象;-f
仅检查常规文件。