On Thu, Jan 13, 2022 at 11:55:45AM +0100, Kusalananda Kähäri wrote:
> 
> When you want to store several separate arguments, do not combine them
> into a single string.
> 
> Compare this
> 
>       args="-a 'hello world' -b '1 * 3'"
>       printf '"%s"\n' $args
> 
> and
> 
>       args=( -a 'hello world' -b '1 * 3' )
>       printf '"%s"\n' "${args[@]}"

Portably, to shells without arrays:

        set -- -a 'hello world' -b '1 * 3'
        printf '"%s"\n' "$@"

> Using an unquoted variable causes the shell to split the variable's
> value on spaces, tabs, and newlines (by default, the values in the IFS
> variable).  The words generated from this also undergoes filename
> globbing.  This is not what you want to do.
> 
> Instead, use an array to store the quoted arguments, and then make sure
> that you properly quote the expansion of the array's elements when you
> use it on the command line.
> 
> The bug is in your code, not in bash.
> 
> See also:
> 
> https://unix.stackexchange.com/questions/68694/when-is-double-quoting-necessary
> https://unix.stackexchange.com/questions/444946/how-can-we-run-a-command-stored-in-a-variable
> 
> (and others)
> 
> 
> On Thu, Jan 13, 2022 at 10:13:05AM +0000, ju nan wrote:
[cut]

-- 
Andreas (Kusalananda) Kähäri
SciLifeLab, NBIS, ICM
Uppsala University, Sweden

.

Reply via email to