내 .zshrc에 이 기능이 있습니다.
activated=false
function test_toggle() {
if [ $activated=false ]; then
echo "WAS FALSE"
activated=true
else
echo "WAS TRUE"
activated=false
fi
}
activated
false
와 사이의 var 상태를 전환 하는 함수를 원합니다 true
. 그러나 터미널을 열고 함수를 실행하면 다음과 같은 결과가 나타납니다.
$ test_toggle
WAS FALSE
$ test_toggle
WAS FALSE
$ test_toggle
WAS FALSE
함수가 activated
상위 범위의 변수를 올바르게 사용하고 변경하도록 하려면 어떻게 해야 합니까?
답변1
나는 여기서 문제가 foo=bar
할당( 과 동일 activated=false
)이라고 생각하며 쉘 파서는 할당을 조건의 부작용으로 처리합니다. ZSH 코드에서는 항상 [[
Bourne을 사용하고 [
, foo=bar
테스트와 과제를 구별하려면 공백을 사용해야 합니다.
activated=false
function test_toggle() {
if [[ $activated = false ]]; then
echo "WAS FALSE"
activated=true
else
echo "WAS TRUE"
activated=false
fi
}
결과:
% exec zsh
% which test_toggle
test_toggle () {
if [[ $activated = false ]]
then
echo "WAS FALSE"
activated=true
else
echo "WAS TRUE"
activated=false
fi
}
% echo $activated
false
% test_toggle
WAS FALSE
% test_toggle
WAS TRUE
% test_toggle
WAS FALSE
%