为何cd "$dir_name" && rm *中dir_name为空时rm *仍会执行?
问题解答
你疑惑的核心是对cd "$dir_name"在dir_name为空时的行为理解有误。
当dir_name未设置或为空字符串时,cd "$dir_name"等价于执行无参数的cd——而无参数的cd默认会切换到用户主目录,并且返回值为0(执行成功),这就会触发后续的&& rm *,最终导致主目录下的文件被删除。
实际测试验证:
- 执行
dir_name=""后,再运行cd "$dir_name" && echo "执行成功",你会看到输出"执行成功",同时当前目录已切换到主目录。 - 要规避这个风险,可以先判断变量是否非空,比如
[ -n "$dir_name" ] && cd "$dir_name" && rm *,或者开启set -u选项(遇到未设置的变量直接报错退出)。
书中的说法完全正确,这种写法的风险根源是cd空参数时的默认跳转行为,而非cd执行失败。
内容的提问来源于stack exchange,提问作者Skmp
相关产品推荐
相关产品推荐

