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

如何在Bash脚本中读取一行特定部分?拆分输入与预期值问题

解决方法

针对你需要拆分同一行中输入值与正确值的需求,有几种实用的Bash命令/方法可以实现:

1. 直接用read命令拆分变量(最简洁高效)

read命令默认会按空白字符(空格、制表符等)分割行内容,并依次赋值给多个变量。你可以直接在while循环中声明两个变量:

#!/bin/bash
# 编译部分保持不变
cc main.c -S
cc increment.c -S
cc main.s -c
cc increment.s -c
cc main.o increment.o -o main

# 修改read循环,同时读取input和correct
while read input correct; do
    echo "input: $input, main: "
    # 捕获程序输出结果
    result=$(./main <<< "$input")
    echo "$result, correct: $correct"
    # 对比实际结果与预期值
    if [ "$result" -eq "$correct" ]; then
        echo "测试通过"
    else
        echo "测试失败:预期$correct,实际$result"
    fi
done < "./tests_inputs.txt"

如果你的输入文件中用的是其他分隔符(比如逗号,),可以通过设置IFS(内部字段分隔符)来指定:

while IFS=, read -r input correct; do
    # 逻辑同上
done < "./tests_inputs.txt"

-r选项用于禁用反斜杠转义,避免读取特殊字符时出现异常。

2. 用cut命令拆分

如果需要更灵活的字段提取,可以用cut命令按分隔符截取字段:

while read line; do
    input=$(echo "$line" | cut -d' ' -f1)  # -d指定分隔符,-f1取第一个字段
    correct=$(echo "$line" | cut -d' ' -f2) # -f2取第二个字段
    # 后续测试逻辑同上
done < "./tests_inputs.txt"

3. 用awk命令拆分

awk擅长处理文本字段,也可以用来拆分行内容:

while read line; do
    input=$(awk '{print $1}' <<< "$line")
    correct=$(awk '{print $2}' <<< "$line")
    # 后续测试逻辑同上
done < "./tests_inputs.txt"

其中第一种方法(直接用read多变量赋值)是最推荐的,因为它不需要额外调用外部命令,性能更好,代码也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:35:33