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