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

如何用数组中的关键词批量运行pdfgrep并分别保存结果?

批量PDF关键词搜索脚本修复方案

需求

在PDF文件中搜索多个不同关键词,通过pdfgrep实现批量遍历数组中的每个关键词执行搜索,并将每个关键词的搜索结果保存到单独文件中。

原脚本

#!/bin/bash

function search_elements(){
   array=("$@")
   for i in "${array[@]}";
       do
              pdfgrep -Hir ' "$i" ' . 
       done
}

array = ("gomma" "lacca" "bromo")

search_elements "$(array[@])"

ShellCheck检测到的错误

  • 第5行:SC2034(警告):i 未被使用,请确认使用情况(若外部使用则需导出)。
  • 第7行:SC2016(提示):单引号内的表达式不会展开,需使用双引号。
  • 第11行:SC2283、SC1036、SC1088(错误):赋值时=两侧不能有空格,此处括号使用无效,解析在此处终止。

修正后的脚本

#!/bin/bash

function search_elements(){
    # 接收传入的关键词数组
    local keywords=("$@")
    for keyword in "${keywords[@]}"; do
        # 搜索关键词并将结果保存到对应文件
        pdfgrep -Hir "$keyword" . > "${keyword}_results.txt"
    done
}

# 正确定义关键词数组(=两侧无空格)
keywords_array=("gomma" "lacca" "bromo")

# 正确传递数组参数给函数
search_elements "${keywords_array[@]}"

修复细节说明

  1. 数组赋值错误修复:Shell里变量赋值时=前后不能加空格,原脚本array = (...)会被当成命令执行,改成keywords_array=("gomma" "lacca" "bromo")即可正常定义数组。
  2. 变量展开问题修复:单引号会阻止Shell解析变量,原脚本' "$i" '无法替换成实际关键词,改用双引号包裹"$keyword",确保关键词能正确传入pdfgrep。
  3. 函数参数传递修复:原脚本search_elements "$(array[@])"是错误的写法,正确传递数组的方式是search_elements "${keywords_array[@]}",这样每个数组元素会作为独立参数传给函数。
  4. 结果保存实现:新增> "${keyword}_results.txt",把每个关键词的搜索结果输出到以关键词命名的文件里,满足“每个关键词结果存单独文件”的需求。
  5. 变量可读性优化:把循环变量从i改成keyword,既消除了SC2034的警告(变量被实际使用),也让代码逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:39