对于检查文件的 if条件,有两个开关: -e和 -f。
if
-e
-f
这两者有什么区别?
$ 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以及目录的 没错。
/etc/hosts
/dev/null
如果 FILE 存在并且是常规文件,则为 [ -f FILE ] True。 对于 /etc/hosts返回 没错,对于 /dev/null返回 假的(因为它不是常规文件) ,对于 /dev返回 假的,因为它是一个目录。
[ -f FILE ]
/dev
If 语句实际上使用程序‘ test’进行测试。您可以通过两种方式编写 if 语句:
if [ -e filename ];
或者
if test -e filename;
如果你知道这一点,你可以很容易地检查手册页的“测试”,找出不同测试的含义:
man test