Viktor Dukhovni:
> On Fri, Feb 24, 2023 at 10:41:01AM -0500, Wietse Venema wrote:
>
> > I have to retract my comment aobut changes to shells. The behavior
> > of backslash-newline inside 'string' (single quotes) is to preserve
> > the backslash and the newline i.e. the backslash is mot special and
> > that has not changed in the past 10+ years.
> >
> > Thus, the form
> >
> > make -f Makefile.init makefiles CCARGS="ccargs stuff \
> > more ccargs stuff" \
> > other stuff \
> > more other stuff
> >
> > Is the form to use when CCARGS spans multiple lines, and you need
> > \\\ to protect " quotes inside CCARGS.
>
> FWIW, by far the simpler solution is to avoid the multiple lines, not
> change to a much more complicated quoting regiment.
>
> To build variables incrementally, initialise a shell variable with
> some of the data, and then grow it:
>
> FOO="${BEFORE_FOO}$FOO${AFTER_FOO}"
>
> if your shell (e.g. "bash") supports array variables, you can also
> incrementally build arrays.
>
> declare -a foo
> foo+=(arg1)
> foo+=("arg2 has a space")
> foo+=('arg3 contains
> a new line')
> ...
>
> i=1; for arg in "${foo[@]}"; do printf "%d: %s\n" $i "$arg"; i=$((i+1));
> done
> 1: arg1
> 2: arg2 has a space
> 3: arg3 contains
> a new line
>
> or whatever meets your needs at the time, but keep the Postfix "CCARGS", ...
> newline free.
I use incremental CCARGS etc. in my own files, but I think that
this would make the README examples noisier than they already are.
Having to use FOO=\\\"bar\\\" rarely is not the end of the world.
It allows humans to read the examples from left to right without
having to mentally juggle a chain of before-after assignments.
Wietse