zsh-users
 help / color / mirror / code / Atom feed
* for syntax differences from ksh
@ 1997-10-16 21:12 Sweth Chandramouli
  1997-10-17  9:25 ` Andrew Main
  0 siblings, 1 reply; 4+ messages in thread
From: Sweth Chandramouli @ 1997-10-16 21:12 UTC (permalink / raw)
  To: zsh-users

	i wrote the following function in ksh to easily add directories 
to my path.  it worked fine there, but when i try to use it in zsh, it fails.

addpath () {
for pathdir in $*; do
   if test -d $pathdir; then
      PATH=$PATH:$pathdir
   fi;
done
}

	in my .zshenv, this fn is then called with a list of dirs as its 
argument (actually, the line is
addpath $pathlist
where pathlist is defined as the list of dirs, separated by spaces).  the 
for loop, which in ksh interprets the list of dirs as a list, works fine, 
in zsh instead interprets the list as one large directory name; the test 
-d then fails, and no dirs are added to the path.  so what is the proper 
syntax for doing this?  and is there someplace that lists the 
logic/syntax for the various shell operators in zsh, and how they differ 
from ksh?  i've picked up a few, through trial and error, but haven't yet 
found a good reference.

	tia,
	sweth.


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

* Re: for syntax differences from ksh
  1997-10-16 21:12 for syntax differences from ksh Sweth Chandramouli
@ 1997-10-17  9:25 ` Andrew Main
  1997-10-17 15:44   ` Bart Schaefer
  0 siblings, 1 reply; 4+ messages in thread
From: Andrew Main @ 1997-10-17  9:25 UTC (permalink / raw)
  To: Sweth Chandramouli; +Cc: zsh-users

Sweth Chandramouli wrote:
>	i wrote the following function in ksh to easily add directories 
>to my path.  it worked fine there, but when i try to use it in zsh, it fails.
>
>addpath () {
>for pathdir in $*; do
>   if test -d $pathdir; then
>      PATH=$PATH:$pathdir
>   fi;
>done
>}

This function is correct for zsh.

>         (actually, the line is
>addpath $pathlist
>where pathlist is defined as the list of dirs, separated by spaces)

There's your problem.  By default, zsh does not perform field splitting on
the result of parameter substitution.  There are three possible solutions.
First, you can set the option SH_WORD_SPLIT, making zsh act like sh/ksh
in this regard.  Second, you could set that option for just the one
substitution, by rewriting it as `$=pathlist'.  The best solution would
be to use an array variable, which will allow you to handle pathnames
containing whitespace.

-zefram


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

* Re: for syntax differences from ksh
  1997-10-17  9:25 ` Andrew Main
@ 1997-10-17 15:44   ` Bart Schaefer
  1997-10-18  6:09     ` Sweth Chandramouli
  0 siblings, 1 reply; 4+ messages in thread
From: Bart Schaefer @ 1997-10-17 15:44 UTC (permalink / raw)
  To: Sweth Chandramouli, zsh-users

On Oct 17, 10:25am, Andrew Main wrote:
} Subject: Re: for syntax differences from ksh
}
} Sweth Chandramouli wrote:
} >
} >addpath () {
} >for pathdir in $*; do
} >   if test -d $pathdir; then
} >      PATH=$PATH:$pathdir
} >   fi;
} >done
} >}
} 
} This function is correct for zsh.

Yes, but I'd recommend

	PATH=${PATH}:$pathdir

because of zsh's `:' variable modifiers.  It happens to work here because
zsh ignores the `:' when it is not followed by a recognized modifier, but
I think it's a bad habit to rely upon that.

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


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

* Re: for syntax differences from ksh
  1997-10-17 15:44   ` Bart Schaefer
@ 1997-10-18  6:09     ` Sweth Chandramouli
  0 siblings, 0 replies; 4+ messages in thread
From: Sweth Chandramouli @ 1997-10-18  6:09 UTC (permalink / raw)
  To: zsh-users

At 11:44 AM -0400 on 10/17/97, Bart Schaefer wrote:


> On Oct 17, 10:25am, Andrew Main wrote:
> } Subject: Re: for syntax differences from ksh
> }
> } Sweth Chandramouli wrote:
> } >
> } >addpath () {
> } >for pathdir in $*; do
> } >   if test -d $pathdir; then
> } >      PATH=$PATH:$pathdir
> } >   fi;
> } >done
> } >}
> }
> } This function is correct for zsh.
>
> Yes, but I'd recommend
>
> 	PATH=${PATH}:$pathdir
>
> because of zsh's `:' variable modifiers.  It happens to work here because
> zsh ignores the `:' when it is not followed by a recognized modifier, but
> I think it's a bad habit to rely upon that.

	in a search for a better habit: is it then always correct to enclose
the variable name in braces?  i remember being told at some point not to do
so, though i think that was for a different shell altogether.

	(thanks to everyone who explained the word splitting problem; as soon
as the first person pointed it out, i remembered reading it in the faq.
doh!)

	-- sweth



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

end of thread, other threads:[~1997-10-18  7:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-10-16 21:12 for syntax differences from ksh Sweth Chandramouli
1997-10-17  9:25 ` Andrew Main
1997-10-17 15:44   ` Bart Schaefer
1997-10-18  6:09     ` Sweth Chandramouli

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).