Bash 완성 함수의 일부 공통 변수의 범위와 출처

Bash 완성 함수의 일부 공통 변수의 범위와 출처

cur, prev, 분할, 단어 및 cword와 같은 변수가 있습니다. 완성 함수에 사용할 수 있는 값이 있는 것 같습니다. 어디에서 정의되고 할당됩니까? 어딘가로 수출되나요? 이러한 변수를 완료 시 동일한 이름을 가진 지역 변수로 선언해야 합니까?

답변1

미리 정의된 함수 _init_completion(선언은 다음과 같을 수 있음) 를 사용하는 경우이것) 내 완성 함수에서는 일부 변수를 지역 변수로 선언해야 합니다.

위의 진술을 인용하면 다음과 같습니다 _init_completion.

# Initialize completion and deal with various general things: do file
# and variable completion where appropriate, and adjust prev, words,
# and cword as if no redirections exist so that completions do not
# need to deal with them.  Before calling this function, make sure
# cur, prev, words, and cword are local, ditto split if you use -s.

words어쩌면 배열로 사용되기 때문에 로컬 배열로 선언하는 것이 더 나을 수도 있습니다 . 그러한 다른 함수를 사용하는 경우 다른 변수를 선언해야 할 수도 있습니다. 필요한 것이 있는지 코드를 확인하는 것이 좋습니다.

Bash에서 변수 범위를 테스트합니다.

local함수에서 사용 한다면a

(
    x=1
    (
        unset -v x
        b() { echo $x; x=b; }
        a() { local x=a; b; echo $x; }
        a
        if [[ ${x+x} ]]; then
            echo $x
        else
            echo 'x is unset'
        fi
    )
    echo $x
)

출력은 다음과 같습니다

a
b
x is unset
1

local하지만 함수에서 사용 하지 않으면a

(
    x=1
    (
        unset -v x
        b() { echo $x; x=b; }
        a() { x=a; b; echo $x; }
        a
        if [[ ${x+x} ]]; then
            echo $x
        else
            echo 'x is unset'
        fi
    )
    echo $x
)

출력은 다음과 같습니다

a
b
b
1

즉, 호출자가 값을 사용할 수 있습니다 a.

관련 정보