通过自定义函数加载脚本

通过自定义函数加载脚本

我想通过我称为 的脚本加载脚本loader.sh

#### Loader.sh
uload() {
    # ...
    if ! is_loaded $file
    then
        . "${file}" || exit 3

        if [[ ! -z "${callback}" ]]
        then
            "${callback}"
        fi
    fi
}

### log.sh
declare -r WARN=3

warn() {
    echo "${WARN}: $@" >&2
}

使用案例:

. "${loader.sh}"

uload "log.sh"

warn 'test'

这会导致此错误:

WARN: unbound variable

为什么我会收到此错误?

答案1

这是两者一起的症状:

  • 正在设置的选项-u,这会导致未设置的变量触发以下错误unbound variable
  • 变量WARN尚未设置

要确认或排除这种情况,请执行以下操作:

  • 检查标志echo $-是否u已设置
  • 尝试是否可以手动echo "$WARN"确保它已设置或使用该x选项进行调试

答案2

我想到了!

当替换declare -r为时,readonly我不再收到错误。

使用内置的声明限制变量的范围。

http://tldp.org/LDP/abs/html/declareref.html

这就是我修复它的方法:

### log.sh
readonly WARN=3

warn() {
    echo "${WARN}: $@" >&2
}

相关内容