On Thu, Mar 14, 2019 at 5:47 PM Ævar Arnfjörð Bjarmason <ava...@gmail.com> wrote: > I fixed a test to avoid the pattern a0a630192d > (t/check-non-portable-shell: detect "FOO=bar shell_func", 2018-07-13) > tests for. The new pattern is more obvious. > > As an aside I don't get how that doesn't work as intended from the > commit message of that commit & its series. > > $ cat /tmp/x.sh > sayit() { echo "saying '$SAY'"; }; > SAY=hi sayit; sayit; > $ sh /tmp/x.sh > saying 'hi' > saying '' > > I get the same thing on bash, dash, NetBSD ksh, Solaris's shell & > AIX's. I.e. it's explicitly not assigning $SAY for the duration of the > shell [...]
The shells you tested may all behave "sanely" given that input, but not all shells do. For instance, on MacOS, the factory-supplied bash 3.2.57 behaves in the "broken" way in 'sh' compatibility mode: $ cat /tmp/x.sh sayit() { echo "saying '$SAY'"; }; SAY=hi sayit; sayit; $ /bin/sh /tmp/x.sh saying 'hi' saying 'hi' $ /bin/bash /tmp/x.sh saying 'hi' saying ''