사용자 정의 기능을 통해 스크립트 로드

사용자 정의 기능을 통해 스크립트 로드

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

관련 정보