내가 호출하는 스크립트를 통해 스크립트를 로드하고 싶습니다 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
}