From: Zoltan Hidvegi <hzoli@cs.elte.hu>
To: kaefer@aglaia.snafu.de (Thorsten Meinecke)
Subject: Re: Expansion/quoting quirks
Date: Mon, 6 Nov 1995 18:25:09 +0100 (MET) [thread overview]
Message-ID: <199511061725.SAA08785@bolyai.cs.elte.hu> (raw)
In-Reply-To: <m0tC4gW-00007BC@aglaia.snafu.DE> from "Thorsten Meinecke" at Nov 5, 95 02:00:27 pm
Thorsten Meinecke wrote:
> echo `echo \\\\` # broken in hzoli, and in vanilla zsh if invoked as (k)sh
Yes, that's really broken. However echo is not good for testing here since
shells are diffen in how they interpret escape sequences in echo. It's better
to alias echo to 'print -r --'. With zsh it is enough to set the bsdecho
option. This bug appeared with the input patches from Peter. The following
happens: the \\\\ within `...` is parsed as Bnull\Bnull\. The lexer is
called again with that and it thinks that the first \ quotes the Bnull. The
last \ then a parse error. Below is a patch to input.c to drop tokens from
the input. These returned tokens caused some other bugs earlier and it can be
dangerous when a script contains some tokens.
> echo "$(echo \\\\)" # sh and ksh seem to differ here (bash would give `\\')
sh should give two slashes. The difference is probably in the escape handling
of sh.
> nargs ${undef-"a b"} # vanilla + hzoli: shouldn't split here
That's difficult. sh_word_split splits the result of a parameter expansion.
Here the result is 'a b' which is split to 'a' 'b'.
> #% argc=3, argv=( 'a b' '' 'c' )
> nargs ${undef-"$@"} # hzoli: 'a b' shouldn't split into 'a' 'b'
Same as the previous example.
> #% argc=3, argv=( 'a b' '' 'c' )
> nargs "${undef-"$@"}" # hzoli: zsh: closing brace expected
That's because the second " closes the first. It would be easy to fix it.
My problem is that I do not know what is the standard behaviour here. My
library does not have the relevant POSIX papers.
It would be important to know how to parse these things. It seems that the
lexer should be called on the body of ${...-...}. I'll try to fix these if
someone tells me what the standards say here. I have ksh93. May I assume
that ksh93 behaviour is the standard?
The most difficult part here is ${...##...}. Here the body should be
interpreted as a pattern. Here the expanded body shoud be parsed again for
quotes. E.g. foo='te\s\t' bar='\s\t' ; echo ${foo%%$bar} does not removes the
tail of foo since \ only escapes the s and t. But foo='te"st"' bar='"??"'
echo ${foo%$bar} does remove the tail.
Bye,
Zoltan
diff -c Src/input.c~ Src/input.c
*** Src/input.c~ Sat Nov 4 09:47:43 1995
--- Src/input.c Mon Nov 6 17:50:17 1995
***************
*** 109,115 ****
if (inbufleft) {
inbufleft--;
inbufct--;
! return lastc = (unsigned)*inbufptr++;
}
/*
* No characters in input buffer.
--- 109,118 ----
if (inbufleft) {
inbufleft--;
inbufct--;
! lastc = (unsigned)*inbufptr++;
! if (itok(lastc))
! continue;
! return lastc;
}
/*
* No characters in input buffer.
prev parent reply other threads:[~1995-11-06 18:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1995-11-05 13:00 Thorsten Meinecke
1995-11-05 18:26 ` Barton E. Schaefer
1995-11-06 15:39 ` Zoltan Hidvegi
1995-11-06 17:25 ` Zoltan Hidvegi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=199511061725.SAA08785@bolyai.cs.elte.hu \
--to=hzoli@cs.elte.hu \
--cc=kaefer@aglaia.snafu.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).