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

在Bash中实现类模块导入:导入模块的EXPORTS关联数组

实现Bash中的基础模块导入功能

你这个思路挺巧妙的——通过模块内的EXPORTS关联数组标记要对外暴露的内容,再用自定义的import函数把这些内容映射到指定的变量里,完全贴合Shell脚本的特性。我帮你把代码整理完整并补充关键细节的说明:

主文件(已导入Bash会话的脚本)

#!/bin/bash

import () {
    # 动态声明一个关联数组,用来存储导入的模块内容
    eval "declare -A $1"
    # 加载目标模块脚本,让模块的EXPORTS数组进入当前会话
    source "$2"
    # 遍历模块的EXPORTS数组,将每个键值对赋值到我们创建的数组中
    for i in "${!EXPORTS[@]}"
    do
        echo "from import (line 9): ${1}[$i]=${EXPORTS[$i]}"
        eval "${1}[$i]=${EXPORTS[$i]}"
    done
}

模块文件示例(比如module.sh)

要被导入的模块需要定义EXPORTS关联数组,把要导出的内容放在里面:

#!/bin/bash

# 定义模块对外暴露的内容
declare -A EXPORTS=(
    [greet]="Hello from the module!"
    [version]="1.0.0"
    [get_date]='date +%Y-%m-%d'
)

使用示例

在Bash会话里这样调用就能导入模块:

# 将module.sh的内容导入到MYMODULE关联数组中
import MYMODULE module.sh

# 访问导入的内容
echo "${MYMODULE[greet]}"
# 执行导出的命令(如果需要的话)
eval "${MYMODULE[get_date]}"

关键细节说明

  • eval "declare -A $1":因为我们要创建的数组名称是通过参数传入的,所以必须用eval来动态执行声明命令,否则无法直接用变量名创建数组。
  • source "$2":加载模块脚本后,模块里的EXPORTS数组会被加载到当前Shell会话中,这样import函数才能遍历它。
  • 遍历EXPORTS时用eval赋值:同样是因为目标数组的名称是动态的,需要eval来完成动态赋值操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:35