A verificação de igualdade parece ser sempre verdadeira [duplicada]

0

Eu tenho essa função no meu .zshrc:

activated=false

function test_toggle() {
  if [ $activated=false ]; then
    echo "WAS FALSE"
    activated=true
  else
    echo "WAS TRUE"
    activated=false
  fi
}

Gostaria que a função alternasse o estado de var activated entre false e true . Mas se eu abrir um terminal e executar a função, eu só entendo isso:

$ test_toggle
WAS FALSE
$ test_toggle
WAS FALSE
$ test_toggle
WAS FALSE

Como posso fazer a função usar e alterar a variável: activated do escopo pai corretamente?

    
por Rotareti 30.11.2016 / 23:00

1 resposta

1

Eu suspeito que o problema aqui é que foo=bar é atribuição (igual a activated=false ), e o analisador de shell está atribuindo como um efeito colateral do condicional. Sempre use [[ no código ZSH sobre o Bourne [ e o foo=bar deve usar espaços para distinguir o teste da atribuição:

activated=false
function test_toggle() {
  if [[ $activated = false ]]; then
    echo "WAS FALSE"
    activated=true
  else
    echo "WAS TRUE"
    activated=false
  fi
}

Resultado:

% 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
% 
    
por 30.11.2016 / 23:37