Re: Question on $IFS related differences (Was: Question on $@ vs $@$@)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 18, 2024 at 08:05:10 +0300, Oğuz wrote:
> On Wed, Sep 18, 2024 at 4:19 AM Steffen Nurpmeso <steffen@xxxxxxxxxx> wrote:
> >
> 
> It boils down to this:
> 
>   f(){ echo $#;}; set "" "" ""; IFS=x; f $*
> 
> bash, NetBSD and FreeBSD sh, and ksh88 all agree and print 2. pdksh
> prints 3 but mksh and oksh print 1. dash, ksh93, yash, and zsh print
> 0.

At the risk of sounding like a broken record, using an unquoted $* or $@
in a context where word splitting occurs is just *begging* for trouble.
Please don't do this in your scripts.  All of these implementation
differences and possible bugs will just stop mattering, if you stop
using questionable shell features.

If you want to pass along your positional parameters to a function,
use "$@" with quotes.  This will pass each parameter as a separate
argument to the function, with no modifications.  It should work in
every post-Bourne shell (if it doesn't, that's a bug).  This is almost
always what you want.

If you want to join all of your positional parameters together into
a single string, use "$*" with quotes.  The first character of IFS
will be inserted between each pair of parameters.  This is sometimes
useful when writing messages to log files, or to produce a simple
row of delimited fields (not a full-blown CSV file, though).




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux