You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化这段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:32:47