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

使用Bash脚本排序对比CSV文件出现语法错误如何解决

问题解决办法

核心报错原因

<(命令)属于Bash独有的进程替换特性,你触发语法报错的核心原因是当前脚本运行环境不支持该特性:

  • 要么是你用sh test.sh的方式调用脚本,sh默认不支持进程替换语法
  • 要么是脚本头部没有添加指定Bash为解释器的shebang声明,系统用默认的sh解析脚本

修复步骤

第一步:修正解释器配置

  • 在脚本的第一行添加shebang声明:
    #!/usr/bin/env bash
    
  • 运行脚本时用bash调用,不要用sh:
    bash test.sh 你的父目录参数
    

第二步:修正脚本内的隐性问题

你现有的脚本还有几个容易引发异常的问题,建议同步修改:

  • 遍历文件名不要解析ls的输出,遇到带空格、特殊字符的文件名会直接出错,改用glob通配符遍历
  • ccu_file="$1/ccu/$filename "末尾多了多余空格,会导致找不到对应CCU目录下的文件
  • 所有变量引用建议包裹双引号,避免特殊字符被拆分解析
  • 补充CCU侧文件存在性判断,避免dev目录有文件、ccu目录没有时的报错

修正后的完整脚本

#!/usr/bin/env bash
# 参数校验
if [ $# -ne 1 ] || [ ! -d "$1/dev" ] || [ ! -d "$1/ccu" ]; then
    echo "用法: $0 父目录路径,请确保路径下存在dev、ccu两个子目录"
    exit 1
fi

for full_path in "$1"/dev/*.csv
do
    # 提取纯文件名
    filename=$(basename "$full_path")
    dev_file="$1/dev/$filename"
    ccu_file="$1/ccu/$filename"

    # 跳过不存在的CCU侧文件
    if [ ! -f "$ccu_file" ]; then
        echo "⚠️  $ccu_file 不存在,跳过对比"
        continue
    fi

    echo "=== 对比文件:$dev_file <-> $ccu_file ==="
    diff_result=$(diff <(sort "$dev_file") <(sort "$ccu_file"))
    if [ $? -eq 0 ]; then
        echo "✅ 文件内容完全一致"
    else
        echo "❌ 文件内容存在差异,差异如下:"
        echo "$diff_result"
    fi
    echo "----------------------------------------"
done

内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:36:02