Я думаю, что это наиболее релевантная цитата из исходного кода (y.tab.c
):
/* Based on which dolstate is currently in (param, op, or word),
decide what the op is. We're really only concerned if it's % or
#, so we can turn on a flag that says whether or not we should
treat single quotes as special when inside a double-quoted
${...}. This logic must agree with subst.c:extract_dollar_brace_string
since they share the same defines. */
/* FLAG POSIX INTERP 221 */
[...]
/* The big hammer. Single quotes aren't special in double quotes. The
problem is that Posix used to say the single quotes are semi-special:
within a double-quoted ${...} construct "an even number of
unescaped double-quotes or single-quotes, if any, shall occur." */
/* This was changed in Austin Group Interp 221 */
Мне не совсем понятно почему одинарные кавычки не особенные,но это похоже на сознательный выбор, сделанный после долгих (и мне говорили спорных) дебатов, предшествующих изменению.Но дело в том (если я правильно суммирую это), одиночные кавычки здесь являются просто обычными символами, а не синтаксическими кавычками, и трактуются буквально.