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

Reply via email to