检查文件条件的if
语句有两个开关:-e
和-f
。
这两者之间有什么区别?
检查文件条件的if
语句有两个开关:-e
和-f
。
这两者之间有什么区别?
参见:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
我认为这些不是“if开关”,而是“test开关”(因为你必须在[]括号内使用它们)。
但区别在于:
[ -e 文件 ]
如果文件存在,则为真。
这将对/etc/hosts
和/dev/null
及目录返回true。
[ -f 文件 ]
如果文件存在且是普通文件,则为真。
对于/etc/hosts
,这将返回true,对于/dev/null
(因为它不是普通文件)和/dev
都会返回false,因为它是一个目录。
$ 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页面,以了解不同测试的含义:
man test
-e
会检查 任何 类型的文件系统对象;-f
只会检查普通文件。