【发布时间】:2014-07-21 02:46:15
【问题描述】:
我想将文件作为“支持”脚本包含到 shell 脚本中。既然他们设置了东西并检查了环境,我只想让他们执行一次。
我的方法是创建一个全局数组,检查该数组中是否存在脚本名称。如果没有,请将其添加到数组中并“获取”外部文件。
当前代码如下所示:
function array_contains() { # array, value
local element
for element in $1; do
[[ "$element" == "$2" ]] && return 0
done
return 1
}
declare -a LOADED_SUPPORT_SCRIPTS
function require_support() { # file
# Check if we loaded the support already
array_contains ${LOADED_SUPPORT_SCRIPTS[@]} $1 && return 0
# Add loaded support to array
LOADED_SUPPORT_SCRIPTS=("${LOADED_SUPPORT_SCRIPTS[@]}" "$1")
log -i "Including support for '$1'"
source "$BASE_DIR/supports/$1.sh"
return 1
}
虽然这在理论上应该可行(至少对我而言),但这段代码每次都会失败。不知何故,数组被重置(即使我从未在其他地方访问它)并且总是在开头包含一个“/”条目。
通过进一步搜索我的问题,我发现this "solution" 在我想要包含的每个脚本中都需要一个新的变量名 - 就像 C/C++ 一样。虽然这确实是一个好主意,但我希望我的代码尽可能小,但我并不真正关心数组迭代的性能。
我真的很想知道是否有替代方法,或者我在代码中做错了什么可以修复。提前致谢!
【问题讨论】: