bash脚本使用-d检测目录时,无参数运行返回true的问题求助
Bash脚本无参数时误判目录的问题解决
问题原因
当不传入任何参数运行脚本时,$1是空值,此时[ -d $1 ]会被解析为[ -d ]。在bash的test命令(即[ ])中,若只有单个参数,会检查该参数是否为非空字符串。-d本身是一个非空字符串,因此条件判定为true,导致脚本误判为目录。
解决方案
方案1:先检查参数是否存在
在进行目录判断前,先验证是否传入了参数,避免空值导致的错误判断:
# 检查是否传入参数 if [ -z "$1" ]; then echo "请传入要检查的路径参数" exit 1 fi # 检查是否为目录 if [ -d "$1" ]; then echo "$1 是目录" else echo "$1 不是目录" fi
方案2:包裹变量并处理空参数场景
给$1加上双引号(同时避免路径含空格时的解析错误),并单独处理空参数的情况:
if [ -d "$1" ]; then echo "$1 是目录" elif [ -z "$1" ]; then echo "未传入路径参数" else echo "$1 不是目录" fi
额外提示
所有变量引用建议用双引号包裹,防止路径中包含空格、特殊字符时出现解析错误。
内容的提问来源于stack exchange,提问作者Amin Chaloukh El Mohammadi
相关产品推荐
相关产品推荐

