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
.