zsh-users
 help / color / mirror / code / Atom feed
* Global And Local Variables in zsh Functions
@ 2015-08-08 22:44 Georg Wittig
  2015-08-09  0:26 ` ZyX
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Georg Wittig @ 2015-08-08 22:44 UTC (permalink / raw)
  To: zsh-users

Hi,

I'm writing a zsh script that's constructing a rather complex rsync
command. One part of the script is constructing  a list of exclude
commands for rsync. For this I use a global variable EXC. It is built
in the following way

EXC=''
function my_f1 () {
  EXC+=" --exclude='$1'";
}
my_f1 /tmp
my_f1 /opt/windows7
echo ">>>$EXC<<<"

Function my_f1 does a lot of other things that are not relevant in
this context. The output of that script snippet is

>>> --exclude='/tmp' --exclude='/opt/windows7'<<<

which is exactly what I want.

Now I need that function my_f1 return another value that depends on
it's input parameter. So I rewrote my_f1 to my_f2 which looks as follows

EXC=''
function my_f2 () {
    EXC+=" --exclude='$1'";
    local x="some value depending on $1"
    echo $x
}
x1=$(my_f2 /tmp)
x2=$(my_f2 /opt/windows7)
echo ">>>$EXC<<<"

To my surprise, EXC is empty now: The output is

>>><<<

Why is EXC empty in the case of my_f2, and correct in the case my_f1?
Exists there an influence of the local variable x, or is the culprit
the way that my_f2 returns it's value to the calling point? How do I
rewrite my_f2 such that the value of EXC is correct?

Thanks for your hints,
     --Georg

[zsh-5.0.8-5.fc22.x86_64]


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-08-09  0:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-08 22:44 Global And Local Variables in zsh Functions Georg Wittig
2015-08-09  0:26 ` ZyX
2015-08-09  0:31 ` Bart Schaefer
2015-08-09  0:45 ` Mikael Magnusson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).