Re: interactive shell detection in shrc

RVP <[email protected]>
Newsgroups gmane.os.netbsd.devel.userlevel
Message-ID <[email protected]>
On Fri, 27 Sep 2024, Steffen Nurpmeso wrote:

> Yes i am afraid of shell field splitting and expansion, and i do
> not understand why eg
>
>  a() {
>          echo $#,1="$1"/$1,2="$2"/$2,3="$3"/$3,4="$4"/$4,5="$5"/$5,6="$6"/$6,'*'="$*"/$*,'@'="$@",$@
>          echo $#,1= "$1" , $1 , 2= "$2" , $2 , 3= "$3" , $3 , 4= "$4" , $4 , 5= "$5" , $5 , 6= "$6" , $6 , '*=' "$*" , $* , '@=' "$@" , $@
>  }
>  set -- '' '' ''
>  a "$*"$* $*
>

Don't rightly see what the difficulty here is: both NetBSD's /bin/sh and bash
produce identical outputs (ie. what you would expect here):

```
$ sh ./x.sh
1,1=  / ,2=/,3=/,4=/,5=/,6=/,*=  / ,@=  ,
1,1=    , , 2=  , , 3=  , , 4=  , , 5=  , , 6=  , , *=    , , @=    ,
$ cmp <(bash ./x.sh) <(dash ./x.sh)
```

whereas dash-0.5.12 substitutes a naked `$@' with a space (which seems wrong
to me--not even sure if a bare `$@' makes sense--as opposed to `"$@"' which is
well defined).

The thing to realise in your script is that only 1 string is passed to the
a() function. The other 2 `$*' are elided since they're not in quotes and
empty. And, `"$*"' ends up (ie. as $1) to a() as `<space><space' since the 
original 3 args ($1, $2, $3) are empty with only the 2 separators in between
'em.

-RVP
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.