我想通过我称为 的脚本加载脚本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
}