anonymous <invalid.nore...@gnu.org> writes:
> URL:
>   <https://savannah.gnu.org/support/?111058>
>
>                  Summary: Problem transmitting script arguments

> Date: Sat 04 May 2024 10:08:41 AM UTC By: Anonymous
> I have the following problem with transmitting arguments to a bash script
> onward to an inside program call.
>
> Lets name the inside program 'Z'.
> An open number of arguments have to be transmitted from the script environment
> to Z's environment. If an argument aa is given enclosed in double-quotes to
> the script (because there are blanks within the value) these double-quotes are
> removed when bash gets hold of it. When I transmit aa by use of $x, $* or $@,
> the double-quotes are not resurrected by bash, which I think is a tragic
> mistake because the call of Z obviously suffers a semantic error.
>
> So far I could not solve the problem. As this kind of problem cannot be new,
> is there any recommended way to solve it?

Providing a detailed example would make your requirements clearer.

But if I understand correctly, you want to provide all of the arguments
that the Bash script receives as arguments to another program, "Z".  The
standard way to do this is:

    Z "$@"

Indeed, it appears that $@ was created with special behavior precisely
to handle this situation.  From the manual page:

       @      Expands  to  the  positional  parameters, starting from one.  In
              contexts where word splitting is performed,  this  expands  each
              positional  parameter  to  a separate word; if not within double
              quotes, these words are subject to word splitting.  In  contexts
              where  word splitting is not performed, this expands to a single
              word with each positional parameter separated by a space.   When
              the  expansion  occurs  within double quotes, each parameter ex‐
              pands to a separate word.  That is, "$@" is equivalent  to  "$1"
              "$2"  ...   If the double-quoted expansion occurs within a word,
              the expansion of the first parameter is joined with  the  begin‐
              ning  part  of  the original word, and the expansion of the last
              parameter is joined with the last part  of  the  original  word.
              When  there  are no positional parameters, "$@" and $@ expand to
              nothing (i.e., they are removed).

Dale

Reply via email to