> On Nov 22, 2019, at 4:45 AM, Peter Stephenson
wrote:
>
> On Fri, 2019-11-22 at 03:03 +0100, Sebastian Gniazdowski wrote:
>> Hello,
>> SH_WORD_SPLIT doesn't seem to cause any effects in this context:
>>
>> setopt SH_WORD_SPLIT
>> var1="a b"
>> var2=$var1
>> print "$var2"
>>
>> Output: a b
>
> Correct, there's no splitting there: you've got a quoted assignment, a
> single word assignment, and quoted output.
>
> What you should be doing depends on what you're trying to do, which you
> don't say. Do you want var2 to be an array of split parts of $var1? In
> that case, do an array assignment.
>
> var2=($var1)
One of the things I do when I’m exploring things like this is write a
silly script that echos out the number of args being passed to it:
% cat <<'EOF' > /tmp/count.sh
#!/bin/zsh -f
echo "$#"
EOF
% chmod +x /tmp/count.sh
% var1="a b"
% setopt nosh_word_split
% /tmp/count.sh $var1
1
% setopt sh_word_split
% /tmp/count.sh $var1
2
Also, when I first started exploring zsh, someone suggested to look at
the zshall man page which is what I do in questions like this. Then
search for SH_WORD_SPLIT and see all the places that it comes up.
It surprised me that this:
var2=$var1
worked as it does but bash does the same thing.
Drifting off topic slightly... I've had to break some of my old
habits. With bash, I would just ALWAYS do "${foo}" ... 100% of the
time. Which is why the assignment above surprised me. I would have
always just done:
var2="${var1}"
With zsh, not only is this unnecessary ... but it is also "wrong" (or
perhaps I should say "not what I want") when dealing with arrays. And
using arrays in zsh appears to be where a lot of the power is at which
I never really took advantage of with bash. Arrays in bash always
seemed like they were playing catch up with ksh and not really a
native bash ground up design and implementation.