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.

-- 
    Viktor.

Reply via email to