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

如何将awk数组赋值给bash数组,实现扩展与编译器映射字典?

Bash字典构建:修复扩展名数组为空问题

原代码的核心错误

  1. awk变量引用错误:split($item, a, "=") 中,$item 是bash变量,在awk环境中未定义,应该用awk内置的$0表示当前接收的整行内容。
  2. for循环语法错误:for (i=1; i <= length(a); i++); print(a[i]) 里的分号导致循环体为空,print语句在循环外,只会打印数组最后一个元素(编译器),后续unset extensions[-1]直接清空了数组。

修正后的完整代码

# 初始化输入数组
array=("s=c=g++" "ipynb=py")

# 初始化bash关联数组(字典)
declare -A ext_compiler_map

for item in "${array[@]}"
do
    # 提取编译器(最后一个等号后的内容)
    compiler=$(echo "$item" | awk '{split($0, a, "="); print a[length(a)]}')
    # 提取所有扩展名(除最后一项外的所有部分)
    extensions=($(echo "$item" | awk '{split($0, a, "="); for (i=1; i < length(a); i++) print a[i]}'))
    
    # 将每个扩展名与编译器绑定存入字典
    for ext in "${extensions[@]}"
    do
        ext_compiler_map["$ext"]="$compiler"
        # 可选:打印验证扩展名
        echo "扩展名: $ext"
    done
done

# 验证字典内容
echo -e "\n最终字典内容:"
for ext in "${!ext_compiler_map[@]}"
do
    echo "$ext -> ${ext_compiler_map[$ext]}"
done

代码说明

  • 用$0替代$item让awk正确读取输入内容
  • 调整for循环条件为i < length(a),直接输出所有扩展名(无需后续unset操作)
  • 使用declare -A创建bash关联数组,实现"扩展名:编译器"的键值对存储
  • 增加了字典内容的验证输出,方便确认结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:13:28