私の.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
%