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

执行提取密度值的Bash脚本时出现command not found错误的原因

Bash脚本出现“command not found”错误的原因及修复方案

错误原因

Bash不支持嵌套关联数组(即数组元素本身是关联数组)的写法,你脚本里的data[$RUNCOUNT]['Density']属于无效语法。Shell会将data[1][Density]=12.157这类表达式当成完整的命令去执行,而该命令并不存在,因此抛出“command not found”错误。

修复方案

方案1:用复合键名模拟二维结构

在一维关联数组中,通过"$RUNCOUNT,键名"的复合键来区分不同计数对应的属性,示例:

declare -A data

tempVar=""
RUNCOUNT=1
FILENAME="$1"
while read line
do
    # 存储文件路径
    data["$RUNCOUNT,path"]="$line"
    # 提取并存储密度值
    density_val=$(grep "Density:" "$line" | tail -1 | grep -Eo "[[:digit:]]+[.][[:digit:]]+")
    data["$RUNCOUNT,Density"]="$density_val"
    # 输出密度值
    echo "${data["$RUNCOUNT,Density"]}"
    RUNCOUNT=$((RUNCOUNT+1))
done < "$FILENAME"

方案2:拆分使用两个独立数组

如果不需要将路径和密度值存在同一个数组,可分别用普通数组存储文件路径和密度值:

declare -a file_paths
declare -a densities

RUNCOUNT=0
FILENAME="$1"
while read line
do
    file_paths[$RUNCOUNT]="$line"
    density_val=$(grep "Density:" "$line" | tail -1 | grep -Eo "[[:digit:]]+[.][[:digit:]]+")
    densities[$RUNCOUNT]="$density_val"
    echo "${densities[$RUNCOUNT]}"
    RUNCOUNT=$((RUNCOUNT+1))
done < "$FILENAME"

额外注意事项

  • 变量引用时添加双引号(如"$line"、"$FILENAME"),避免路径包含空格或特殊字符时出现解析错误。
  • 优先使用$(...)替代反引号`...`,前者可读性更强,且能避免嵌套解析问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:40:27