Bash中test -e判断文件路径始终返回false,如何优化代码?
Bash路径有效性检查的优化方案
原代码的问题在于:test -e $myPath && test -f $myPath执行成功时不会输出任何内容,导致mytest变量为空字符串。[[ ! $mytest ]]会把空值判定为“假”,取反后就会错误触发无效路径的分支。
优化方案一:直接在if条件中判断(推荐)
不需要额外变量,直接利用Bash的条件表达式,同时记得给变量加双引号避免路径含特殊字符时出错:
# 检查路径是否为存在的普通文件 if [[ ! -f "$myPath" ]]; then echo 'Path invalid. Stop..' exit 1 fi
注:-f选项已经包含了“文件存在”的检查(仅当路径存在且是普通文件时返回真),无需额外用-e重复判断。
优化方案二:存储命令退出状态码
如果一定要用变量记录检查结果,可以存储命令的退出状态(0为成功,非0为失败):
# 执行检查并保存退出状态 test -f "$myPath" mytest=$? if [[ $mytest -ne 0 ]]; then echo 'Path invalid. Stop..' exit 1 fi
额外提示
如果需要检查的是目录而非普通文件,可将-f替换为-d;如果只需检查路径存在(不管是文件还是目录),用-e即可。
内容的提问来源于stack exchange,提问作者kzpm
相关产品推荐
相关产品推荐

