On 02/28/2012 11:07 PM, Chet Ramey wrote: > On 2/28/12 4:28 PM, John Kearney wrote: >> >> On 02/28/2012 10:05 PM, Chet Ramey wrote: >>> On 2/28/12 12:26 PM, John Kearney wrote: >>> >>>> But that isn't how it behaves. "${test//str/"dddd"}" >>>> >>>> because str is replaced with '"dddd"' as such it is treating >>>> the double quotes as string literals. >>>> >>>> however at the same time these literal double quotes >>>> escape/quote a single quote between them. As such they are >>>> treated both as literals and as quotes as such >>>> inconsistently. >>> >>> I don't have a lot of time today, but I'm going to try and >>> answer bits and pieces of this discussion. >>> >>> Yes, bash opens a new `quoting context' (for lack of a better >>> term) inside ${}. Posix used to require it, though after >>> lively discussion it turned into "well, we said that but it's >>> clearly not what we meant." >>> >>> There are a couple of places in the currently-published version >>> of the standard, minus any corregendia, that specify this. The >>> description of ${parameter} reads, in part, >>> >>> "The matching closing brace shall be determined by counting >>> brace levels, skipping over enclosed quoted strings, and >>> command substitutions." >>> >>> The section on double quotes reads, in part: >>> >>> "Within the string of characters from an enclosed "${" to the >>> matching '}', an even number of unescaped double-quotes or >>> single-quotes, if any, shall occur." >>> >>> Chet >> >> yhea but I think the point is that the current behavior is >> useless. there is no case where I want a " to be printed and >> start a double quoted string? and thats the current behavior. >> >> >> Not so important how you treat it just need to pick 1. then you >> can at least work with it. Now you have to use a temp variable. >> >> >> as a side note ksh93 is pretty good, intuitive ksh93 -c >> 'test=teststrtest ; echo "${test//str/"dd dd"}"' testdd ddtest >> ksh93 -c '( test=teststrtest ; echo ${test//str/"dd '\''dd"} )' >> testdd 'ddtest > > The real question is whether or not you do quote removal on the > stuff inside the braces when they're enclosed in double quotes. > Double quotes usually inhibit quote removal. > > The Posix "solution" to this is to require quote removal if a > quote character (backslash, single quote, double quote) is used to > escape or quote another character. Somewhere I have the reference > to the Austin group discussion on this. >
1${A:-B}2 Logically for consistancy having double quotes at position 1 and 2 should have no effect on how you treat string B. or consider this 1${A/B/C}2 in this case its even weirder double quotes at 1 and 2 has no effect on A or B but modifies how string C behaves.