diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2013-08-23 20:04:12 +1000 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2013-08-23 20:04:12 +1000 |
commit | a7c21a6f4cb42d967854cae954efd4ee66bdea9c (patch) | |
tree | 3002943314ed39a93794b43aa9ac2e4fd7a7b343 | |
parent | [MAN] Fix typo for wait (diff) | |
download | dash-a7c21a6f4cb42d967854cae954efd4ee66bdea9c.tar.gz dash-a7c21a6f4cb42d967854cae954efd4ee66bdea9c.zip |
[EXPAND] Propagate EXP_QPAT in subevalvar
On Tue, Aug 28, 2012 at 01:27:24PM +0000, Todor Vlaev wrote: > > While playing around with parameter expansion I noticed that the > following didn't work in dash (dash 0.5.5.1-7.4ubuntu1) as compared > to bash even though I believe it should be POSIX-compliant: > > my_str=swan; last_char="${my_str#${my_str%?}}"; echo ${last_char} > > If the double quotes are removed, the last character is printed correctly. > > At a quick glance through the commits after the 0.5.5.1 release I saw > the following bug fix. Could it be related? > > 0d7d66039b614b642c775432fd64aa8c11f9a64d > [EXPAND] Fix quoted pattern patch breakage We need to propagate EXP_QPAT in subevalvar as otherwise a nested parameter expansion within subevalvar may be expanded incorrectly. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/expand.c | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 7354832..911d31e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-08-23 Herbert Xu <herbert@gondor.apana.org.au> + + * Propagate EXP_QPAT in subevalvar. + 2012-07-20 Kimo Rosenbaum <kimor79@yahoo.com> * Fix typo for wait in manual. diff --git a/src/expand.c b/src/expand.c index ce60fe9..11fd7b7 100644 --- a/src/expand.c +++ b/src/expand.c @@ -650,7 +650,8 @@ subevalvar(char *p, char *str, int strloc, int subtype, int startloc, int varfla char *(*scan)(char *, char *, char *, char *, int , int); argstr(p, EXP_TILDE | (subtype != VSASSIGN && subtype != VSQUESTION ? - (flag & EXP_QUOTED ? EXP_QPAT : EXP_CASE) : 0)); + (flag & (EXP_QUOTED | EXP_QPAT) ? + EXP_QPAT : EXP_CASE) : 0)); STPUTC('\0', expdest); argbackq = saveargbackq; startp = stackblock() + startloc; |