我正在尝试在Shell中实现类似基本模块的导入。
我的想法是可导入模块应该有一个EXPORTS
关联数组,import
函数将变量名称赋值给模块文件名(例如import MYMODULE module.sh
)
这是我的主文件(源自Bash会话)
#!/bin/bash
import () {
eval "declare -A $1"
{
source "$2"
for i in "${!EXPORTS[@]}"
do
echo "from import (line 9): ${1}[$i]=${EXPORTS[$i]}"
eval "${1}[$i]=${EXPORTS[$i]}"
done
}
}
import VAR echo.sh
for i in ${!VAR[@]}
do
echo "from module (line 19): VAR[$i]=${VAR[$i]}"
done
这里是echo.sh
declare -A EXPORTS
EXPORTS[foo]="bar"
EXPORTS[baz]="ree"
这是我当前的输出
$ source module.sh
from import (line 9): VAR[baz]=ree
from import (line 9): VAR[foo]=bar
# expected output also includes
# > from module (line 19): VAR[baz]=ree
# > from module (line 19): VAR[foo]=bar
基本上我想要创建一个本地VAR变量(它没有)。如果我不想用数组做它,它就可以工作。
我做错了什么(除了“这是一个坏主意” - 我是为了学习目的而做的。)
提前感谢您的帮助!