On Tue, Dec 19, 2006 at 11:35:57AM +1100, herbert wrote: > On Mon, Dec 18, 2006 at 05:45:05PM -0500, Jeff King wrote: > > > > but doing it inside an interpolated string doesn't: > > > > $ foo=bar} > > $ echo "${foo%'}'}" > > bar}'} > > Yes it's a bug in dash. Both quote marks (" and ') are represented > by the same char internally before processing which is where the > mix-up occurs. > > I'll work on a fix. Sorry for the delay. I've finally looked at fixing this. It turns out that dash's behaviour is actually correct and POSIX compliant. It's correct because dash treats all single quotes within double quotes (except those within command substitutions) as literals. This interpretation is also supported by POSIX. In fact the rationale (C.2.2.3) in the POSIX document explicitly disallows the aformentioned usage as it violates the rule that an even number of single quotes if any can occur in an ${...} expression enclosed by double quotes. So the correct and portable expression in this case would be either echo "${foo%\}}" or brace=} echo "${foo%$brace}" Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html