私が呼び出すスクリプトを介してスクリプトをロードしたいと思います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
2つの症状が一緒に現れる場合は次のとおりです。
- オプションが設定されています
-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
}