Shell脚本中rm无法删除外部配置文件定义的目录问题排查
脚本删除目录失败的成因分析
场景重现
需要运行test_shell.sh脚本,删除由test_config.txt配置文件中参数定义的目录:
- test_config.txt 内容:
var = testdir
- test_shell.sh 内容:
#!/bin/bash vardel=$(grep var test_config.txt | cut -d ' ' -f3) echo $vardel rm -rf $var
当前脚本已正确获取到vardel变量的值(testdir),但目标目录未被删除,且无任何警告信息。
问题成因
脚本中变量引用错误:
- 通过命令替换获取到的目录名存储在
vardel变量中,但执行删除操作时却引用了未定义的$var变量。 - 在Bash中,未定义的变量会被展开为空字符串,因此实际执行的命令是
rm -rf(不带任何目标参数)。而rm -rf在没有参数时不会执行任何删除操作,也不会输出警告或错误信息,这就是目录未被删除且无提示的核心原因。
修复方法
将删除命令中的$var替换为正确的变量$vardel,同时建议用双引号包裹变量,避免目录名包含空格等特殊字符时出现问题:
rm -rf "$vardel"
内容的提问来源于stack exchange,提问作者silence_of_the_lambdas
相关产品推荐
相关产品推荐

