Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Bug/Caveat for local variables in functions

On Dec 31, 12:54pm, tim_smithers@xxxxxxxxxx wrote:
} You can't create a local variable with the same name as a special var.

Yes, you can.  Yout just have to tell zsh to make the local non-special.

	local -h path=foo
	echo $path

} testit()
} {
}     local path=foo
}     echo $path
} }
} this echo's your path, not 'foo'. You don't get any warnings about the
} assignment not working etc.

What version of zsh do you have?  Without the -h option, I get this:

testit:local:2: path: can't assign initial value for array

} The main reason I found it was porting some shell which works in ksh and
} bash to zsh compliant (which has a "path" variable).

Usually the quickest way to do this is just to place

    emulate -L sh

at the top of the script.  If you're really _porting_ to native zsh mode,
rather than wanting to have zsh execute a Bourne shell script, then you
may have a lot more changes to make than just adding -h to locals.  For
example, you're probably also going to have to change variable references
from $VAR to $=VAR (when not quoted), to get sh-style word splitting.

Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   

Messages sorted by: Reverse Date, Date, Thread, Author