如何判断目录中文件是否存在?解析test命令检测主目录的疑问
关于
test -e检测文件/目录存在的问题 1. 你找到的代码的问题
首先你贴的代码有两处小问题:
$HOME$是笔误,正确写法是$HOME(环境变量$HOME本身就代表当前用户的主目录,末尾多的$是多余的)- 最后一行的
done是无效的,因为没有对应的循环语句(比如for/while),属于冗余代码
修正后的有效代码应该是:
if test -e $HOME; then echo $HOME; fi
2. test -e $HOME的含义
test是Shell内置命令,用来做条件判断,也可以写成等价的[ -e $HOME ]-e是test的核心选项之一,作用是检查指定路径(不管是文件还是目录)是否存在$HOME是Shell环境变量,指向当前用户的主目录(比如Linux普通用户一般是/home/你的用户名,root用户是/root)
整句的逻辑就是:检查当前用户的主目录是否存在,若存在就打印这个目录的路径。你执行成功是因为正常系统下每个用户都有主目录,所以判断结果为真,自然会执行echo $HOME打印路径。
3. 这是不是高效的文件存在检测方式
绝对是,原因有两点:
test是Shell的内置命令,不需要启动新进程,执行速度极快-e选项只做最基础的“存在性”校验,不会读取文件内容、权限等额外信息,资源开销极小
如果只是单纯检测文件/目录是否存在,test -e 目标路径(或等价的[ -e 目标路径 ])就是最高效的方式之一。
内容的提问来源于stack exchange,提问作者mrkool
相关产品推荐
相关产品推荐

