ksh88 меняет одинарные кавычки на двойные в heredocs?

Кажется, я столкнулся с проблемой, специфичной для ksh88, которая заменяет одинарные кавычки на двойные, но только в определенных ситуациях, включающих heredocs и подстановку команд.

Вот пример:

#!/bin/ksh

# This example works correctly
echo "Example 1:"
cat <<EOF
The 'quick' brown fox "jumped" over the lazy dog.
EOF
echo


# This example is broken
echo "Example 2:"
var=$(cat <<EOF
The 'quick' brown fox "jumped" over the lazy dog.
EOF)
echo "${var}"
echo


# This example works correctly
echo "Example 3:"
var=`cat <<EOF
The 'quick' brown fox "jumped" over the lazy dog.
EOF`
echo "${var}"
echo

И вот вывод (обратите внимание, что Пример 2 отличается):

Example 1:
The 'quick' brown fox "jumped" over the lazy dog.

Example 2:
The "quick" brown fox "jumped" over the lazy dog.

Example 3:
The 'quick' brown fox "jumped" over the lazy dog.

' в" замена, кажется, происходитдо команда работает. В реальном контексте heredoc передает SQL в Oracle. Путем изменения' в", строки конвертируются в идентификаторы, таким образом нарушая SQL. Это также можно наблюдать, включив xtrace во время выполнения приведенного выше кода.

Как я могу предотвратить' в" преобразование в приведенном фрагменте кода без использования обратных кавычек?

Редактировать: Сюжет утолщается. Замена команды подстановки$( ... ) с обратным обозначением не заменяет одинарные кавычки на двойные. Итак (необязательно) второй вопрос: почему?

Ответы на вопрос(1)

Ваш ответ на вопрос