On Thu, May 14, 2020 at 06:03:46PM -0400, Jeff King wrote: > On Thu, May 14, 2020 at 02:05:18PM -0700, Carlo Marcelo Arenas Belón wrote: > > > 4c5971e18a (credential: treat "?" and "#" in URLs as end of host, > > 2020-04-14) introduces check_host_and_path to t0300 and some tests that > > use it, but fail in at least FreeBSD 9.3. > > > > The variables in the here-doc fail to be expanded until they are used as > > part of the eval in check(), resulting in (ex: url=fill) instead of what > > was expected. > > Wow, that's very surprising. And luckily, also a problem that is no longer present with newer versions of the shell and neither NetBSD's or OpenBSD's AFAIK. > Just to be clear, if you run: > > foo() { > for i in "$@"; do > echo "arg:$i" > done > sed s/^/stdin:/ > } > set -- outer > foo inner <<EOF > $1 > EOF > > do you get: > > arg:inner > stdin:inner correct, so the problem was in the here-doc, not the eval; thanks for your explanation and reproduction, will update it in the reroll. $ foo() { > for i in "$@"; do > echo "arg:$i" > done > sed s/^/stdin:/ > } $ set -- outer $ foo inner <<EOF > $1 > EOF arg:inner stdin:inner > ? (on dash and bash, I get stdin:outer as expected). I don't think the > fact that check() uses eval() should matter, because we'd be > interpreting that here-doc earlier as part of read_chunk(). indeed, apologies for the extra quoting which was part of my original debugging and wasn't really needed. will keep it without the inversion, only because I think it looks also clearer with the added indentantion. Carlo