* How should empty aliases work?
@ 2017-12-29 8:30 Bart Schaefer
2017-12-30 1:14 ` Bart Schaefer
0 siblings, 1 reply; 3+ messages in thread
From: Bart Schaefer @ 2017-12-29 8:30 UTC (permalink / raw)
To: Zsh hackers list
Documentation says that if an alias ends in a space, then the next
word is also subject to aliasing.
Consider:
% alias empty=''
% alias output='empty echo'
% alias echo='print -r bar'
% output foo
What should happen? The doc would lead one to expect:
1. "output" expands to "empty echo"
2. "empty" expands to nothing
3. nothing does not end in a space, so the following word ("echo") is
not expanded
4. "echo foo" is executed
What actually happens is that "echo" expands and "print -r bar foo" is
executed. If that's correct, can someone explain why?
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: How should empty aliases work?
2017-12-29 8:30 How should empty aliases work? Bart Schaefer
@ 2017-12-30 1:14 ` Bart Schaefer
2018-01-03 11:47 ` Peter Stephenson
0 siblings, 1 reply; 3+ messages in thread
From: Bart Schaefer @ 2017-12-30 1:14 UTC (permalink / raw)
To: Zsh hackers list
On Fri, Dec 29, 2017 at 12:30 AM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
>
> % alias empty=''
> % alias output='empty echo'
> % alias echo='print -r bar'
> % output foo
>
> What actually happens is that "echo" expands and "print -r bar foo" is
> executed. If that's correct, can someone explain why?
I think the answer is that being a word in command position has
precedence over being a word preceded by an alias replacement. Words
in command position are always alias-replaceable; words not in command
position are alias-replaceable if preceded by an alias replacement
that ended with a space.
So when "empty" disappears, it leaves "echo" in command position and
the first clause applies even though the second clause does not.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: How should empty aliases work?
2017-12-30 1:14 ` Bart Schaefer
@ 2018-01-03 11:47 ` Peter Stephenson
0 siblings, 0 replies; 3+ messages in thread
From: Peter Stephenson @ 2018-01-03 11:47 UTC (permalink / raw)
To: Zsh hackers list
On Fri, 29 Dec 2017 17:14:38 -0800
Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Fri, Dec 29, 2017 at 12:30 AM, Bart Schaefer
> <schaefer@brasslantern.com> wrote:
> >
> > % alias empty=''
> > % alias output='empty echo'
> > % alias echo='print -r bar'
> > % output foo
> >
> > What actually happens is that "echo" expands and "print -r bar foo" is
> > executed. If that's correct, can someone explain why?
>
> I think the answer is that being a word in command position has
> precedence over being a word preceded by an alias replacement. Words
> in command position are always alias-replaceable; words not in command
> position are alias-replaceable if preceded by an alias replacement
> that ended with a space.
>
> So when "empty" disappears, it leaves "echo" in command position and
> the first clause applies even though the second clause does not.
Yes, when we get to "echo" we have no remaining knowledge that we've
expanded an alias. The documentation simply refers to an alias being
expanded "if it is in command position [or a global alias]", with no
reference to preceding aliases. So I think everything is as it should
be.
Consider also
alias foo="echo alias expanded;"
% foo foo
alias expanded
alias expanded
which is just following the same rules.
pws
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-01-03 11:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-29 8:30 How should empty aliases work? Bart Schaefer
2017-12-30 1:14 ` Bart Schaefer
2018-01-03 11:47 ` Peter Stephenson
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).