如何优化这段Bash目录检查与创建函数?
Bash目录创建函数优化建议
优化后的代码
dir_check() { # 检查目标目录:不存在则创建;存在则生成带版本号的子目录 for dir in "$@"; do if [[ ! -d "$dir" ]]; then mkdir "$dir" && echo "$dir created" continue fi local vers_num=1 local new_dir while [[ -d "${dir}-run-${vers_num}" ]]; do ((vers_num++)) done new_dir="${dir}-run-${vers_num}" mkdir "$new_dir" && echo "$new_dir created" done }
关键优化点
- 修复参数处理缺陷:将
for i in $@改为for dir in "$@",确保能正确处理包含空格、特殊字符的目录名,避免路径被拆分。 - 简化版本号检测逻辑:移除原代码中冗余的嵌套判断,直接从版本号1开始循环检测,直到找到不存在的目录路径,减少代码层级,逻辑更直观。
- 使用局部变量隔离作用域:给
vers_num和new_dir加上local声明,避免变量污染函数外部的命名空间。 - 改用Bash原生条件判断:用
[[ ]]替代[ ],支持更简洁的语法,无需对特殊字符额外转义,可靠性更高。 - 关联操作的原子性:用
&&连接mkdir和echo,确保只有目录创建成功时才输出提示,避免错误场景下的误导信息。 - 精简冗余赋值:合并原代码中重复的
new_dir赋值操作,让代码更紧凑。
可选进阶优化
如果需要版本号格式统一(如固定3位:001、002),可以修改版本号生成逻辑:
# 生成固定3位长度的版本号 while [[ -d "${dir}-run-$(printf "%03d" "$vers_num")" ]]; do ((vers_num++)) done new_dir="${dir}-run-$(printf "%03d" "$vers_num")"
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

