ksh88 einfache Anführungszeichen in doppelte Anführungszeichen in Heredocs ändern?

Ich stoße anscheinend auf ein spezifisches Problem von ksh88, bei dem einfache Anführungszeichen in doppelte Anführungszeichen umgewandelt werden, jedoch nur in bestimmten Situationen, in denen es um Heredocs und die Ersetzung von Befehlen geht.

Hier ist ein Beispiel:

#!/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

Und hier ist die Ausgabe (beachten Sie, dass Beispiel 2 anders ist):

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.

Das' zu" Substitution scheint zu erfolgenVo Der Befehl wird ausgeführt. Im aktuellen Kontext übergibt der Heredoc SQL an Oracle. Durch Austausch' zu", Zeichenfolgen werden in Bezeichner konvertiert, wodurch die SQL beschädigt wird. Dies kann auch beobachtet werden, indem xtrace während der Ausführung des obigen Codes aktiviert wird.

Wie kann ich das @ verhinde' zu" Konvertierung im obigen Code-Snippet ohne Verwendung von Backticks?

Bearbeiten Die Handlung verdickt sich. Ersetzen der Befehlssubstitution$( ... ) mit Backtick-Notation ersetzt nicht die einfachen Anführungszeichen durch doppelte Anführungszeichen. Also (optional) Frage zwei: Warum?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage