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

优化Bash脚本:解决未回答问题扫描的假阳性问题

改进Bash脚本识别未回答问题的方案

原脚本的核心问题出在状态处理逻辑和匹配规则上,导致已回答问题被误判、部分回答未被正确跳过,以下是修正方案:

原脚本的问题分析

  • skip_question状态重置时机错误,易引发后续行处理混乱
  • 问题行匹配规则"* "*过于死板,无法兼容带前导空格的单个星号行
  • 未处理文件末尾的孤立问题行(最后一行是问题且无后续内容时,无法被判定为未回答)

修正后的脚本

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "Usage: $0 <document>"
  exit 1
fi

document="$1"
current_question=""

while IFS= read -r line; do
  # 先处理上一行遗留的待检查问题
  if [ -n "$current_question" ]; then
    # 判断当前行是否为两个及以上星号开头(允许前导空格)
    if [[ "$line" =~ ^[[:space:]]*\*\*+ ]]; then
      # 是回答,清空问题变量,跳过后续处理
      current_question=""
      continue
    else
      # 不是回答,输出未回答问题
      echo "Unanswered Question: $current_question"
      current_question=""
    fi
  fi

  # 检查当前行是否为单个星号开头的问题(允许前导空格,星号后无其他星号)
  if [[ "$line" =~ ^[[:space:]]*\*[^*] ]]; then
    # 提取星号后的问题内容(去除前导空格、星号及星号后的空格)
    current_question="${line#*[[:space:]]*[*][[:space:]]}"
  fi
done < "$document"

# 处理文件末尾遗留的未回答问题
if [ -n "$current_question" ]; then
  echo "Unanswered Question: $current_question"
fi

关键改进点

  • 状态管理简化:用current_question直接持有待检查的问题内容,替代原有的skip_question状态,逻辑更直观
  • 匹配规则严谨化:
    • 问题行:兼容带前导空格的情况,且确保星号后无其他星号(避免把回答行误判为问题)
    • 回答行:兼容带前导空格的情况,只要以两个及以上星号开头即判定为回答
  • 新增末尾处理:循环结束后检查是否有未处理的问题,避免遗漏文件最后一行的未回答问题
  • 逻辑顺序调整:优先处理上一行遗留的问题,再检查当前行是否为新问题,避免状态冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:33:28