[please don't top-post on technical lists] On 08/04/2010 09:18 AM, John Lumby wrote: > > Re the statement > > since "$e" is quoted, it must not be elided > > I don't think that is correct. In fact "$e" *must* be elided - because you juxtaposed it with the next token. eliding and quoting are orthogonal. Your statement is confusing to me. Here, in more detail, is exactly what I meant (and what I though I implied in the first case): The word in question is '"$e"$f' before either parameter substitution, or word splitting, or quote elision. After parameter substitution, you are left with '"" val', where a portion of the string was originally quoted, but you also had a portion of the string that was unquoted. Only the ' val' portion of the result is subject to word splitting. Because "$e" is quoted, the resulting empty string must not be elided during word splitting. Therefore, the result after word splitting MUST be the two words '""' and 'val'; then you apply quote elision and are left with two words: '' and 'val'. > > What you appear to be be expecting is that the effect of quoting one token should somehow have some effect on interpretation of a special character (blank) in a subsequent unquoted token. I don't think that is expected behaviour. The quoting of $e has the effect of quoting any special characters inside *it*, of which there are none. your blank is unquoted. Then word-spilling proceeds. No, what I expect is that within a single word, the quoted portion of the word must not be elided during word splitting, except in the special case of "$@". > > What I find interesting is this > > bash -c 'declare -i length; f=" val" e=;concat="$e"$f; length=${#concat}; echo "length= $length"' > 4 Why do you find that interesting? There is NO word splitting in assignment contexts, so the effect of concat="$e"$f is the same as if you had done concat=$e$f or concat="$e$f" in all three cases, concat is assigned the value ' val', which is indeed length 4. But it is unrelated to the bash bug at hand, which is that when "$e"$f is in a context subject to word splitting, then it must result in the two words '' and 'val', not the single word 'val'. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org