Jeff King <peff@xxxxxxxx> writes: > +# The message, filename, and contents strings are evaluated by the shell inside > +# double-quotes, with $n set to the current commit number. So you can do: > +# > +# test_commit_bulk --filename=file --contents='modification $n' > +# > +# to have every commit touch the same file, but with unique content. Spaces are > +# OK, but you must escape any metacharacters (like backslashes or > +# double-quotes) you do not want expanded. Nice. > +test_commit_bulk () { > + indir= > + ... > + while test $# -gt 0 > + do > + case "$1" in > + -C) > + indir=$2 > + shift > + ;; > + ... > + esac > + shift > + done > + total=$1 > + > + in_dir=${indir:+-C "$indir"} I thought that this assignment to $in_dir would be unnecessary if we parsed -C directly into it, i.e. ... -C) in_dir="-C $indir" shift ;; ... but you probably could pass -C '' to defeat an $in_dir that was set earlier by using a separate variable? Messages and other stuff are made `eval`-safe, but this one does not care much about quoting, which made me curious. Reading further, though, I do not seem to see where this variable is referred to, and that is the answer to my puzzlement. This must be a leftover that was written once before but no longer is used. We can remove $in_dir while keeping the initialization and assignment to $indir as-is, I think. All uses of $indir in the remainder of the function look $IFS-safe, which is good.