On Thu, May 14, 2020 at 6:03 PM Jeff King <peff@xxxxxxxx> wrote: > 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 That is indeed the result with the FreeBSD 9.3 shell. Seems buggy. Assigning $1, $2, ... to variables (local or not) as Carlo's patch does seems to work around the buggy behavior.