Greetings zsh-users, I'm using zsh 5.8.1 (Debian). I am seeing inconsistent behavior between using a subshell in the branch of a conditional in bash and zsh. zsh: zsh$ rm -f /tmp/FOO zsh$ ls /tmp/FOO 2> /dev/null || echo "no /tmp/FOO" no /tmp/FOO zsh$ echo | while read LINE; do IP=$(echo $LINE | cut -d ' ' -f 1); if [ -n "$IP" ]; then echo FOO; FOO=$(touch /tmp/FOO); else echo BAR; fi; done; ls /tmp/FOO 2> /dev/null || echo "no /tmp/FOO" BAR /tmp/FOO Why does the subshell in zsh get executed even though the conditional branch is not? That is, the "touch"-ing of /tmp/FOO. bash: bash$ rm -f /tmp/FOO bash$ ls /tmp/FOO 2> /dev/null || echo "no /tmp/FOO" no /tmp/FOO bash$ echo | while read LINE; do IP=$(echo $LINE | cut -d ' ' -f 1); if [ -n "$IP" ]; then echo FOO; FOO=$(touch /tmp/FOO); else echo BAR; fi; done; ls /tmp/FOO 2> /dev/null || echo "no /tmp/FOO" BAR no /tmp/FOO The bash output is what I would expect zsh to execute/output as well. Thanks for helping me understand this. Cheers! -m