平等検査は常に正しいようです。

平等検査は常に正しいようです。

私の.zshrcにこの機能があります。

activated=false

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

activatedfalseとの間の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
% 

関連情報