|
From: | KHMan |
Subject: | Re: [Help-bash] Question about escaping in backquote string in double quoted strings |
Date: | Wed, 15 May 2019 01:06:54 +0800 |
User-agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 |
On 5/15/2019 12:05 AM, Chet Ramey wrote:
On 5/2/19 1:05 PM, KHMan wrote:Hi all, I have a question about escaping of the double quote char in a backquote command string nested inside a double quoted string. I have been trying out an example from the Morbig paper[1] and looking at the bash ref man but couldn't figure things out. Here is a slightly adjusted example from page 4, Example 2.5. Output is at right after the comment #. echo "[` echo \" \\" \" `]" # [ " ] (A)OK, let's look at A. I have simplified the explanation by breaking things into separate steps, even if the code itself performs multiple steps in a single pass. All the quoted text snippets are from the POSIX standard. The parser takes this and applies the double-quoting rules. The command substitution rules enter the picture because POSIX leaves enough behavior undefined so that the double-quoted string can be terminated by a double quote in the backquoted command substitution (ksh93 does this, for instance). The bash parser doesn't allow quotes in a command substitution to terminate a double-quoted string that was started outside it, and doesn't remove backslashes until word expansion, so we have
[snip snip snip] Thank you, I will spend some time to digest what you have written.Please ignore my other posting on the source code, that was my last resort because everyone else was telling me to just use $(command). :-)
In recent years, this particular string nesting combination has caused problems with syntax highlighting for Scintilla-based editors (Geany, Notepad++, SciTE, etc.) Nested strings I sort of fixed, but char escaping in nested strings was a real headache that I postponed until now. While I could analyze and draw up behavioral charts, I couldn't find anything that clearly explained the process. So I have been doing a lot of groping in the dark. This is not a highlighting bug ticket that any other contributor want to touch, ha ha.
I'll probably implement a reasonable subset, then wait for the next bash syntax highlighting bug ticket.
Thanks again, -- Cheers, Kein-Hong Man (esq.) Selangor, Malaysia
[Prev in Thread] | Current Thread | [Next in Thread] |