> On Nov 22, 2019, at 4:45 AM, Peter Stephenson <p.stephenson@xxxxxxxxxxx> 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.
Attachment:
smime.p7s
Description: S/MIME cryptographic signature