Ich möchte so etwas machen:
$ NAME=John
$ cat << '==end' > test
My name is $NAME
==end
$ cat test
My name is John
Irgendwelche Ideen?
Ich möchte so etwas machen:
$ NAME=John
$ cat << '==end' > test
My name is $NAME
==end
$ cat test
My name is John
Irgendwelche Ideen?
Antworten:
cat <<EOF > test
My name is $NAME
EOF
oder auch
cat <<==end > test
My name is $NAME
==end
Hat für mich gearbeitet.
Sieht so aus, als würde ==end
die '
Variable nicht ersetzt.
ah, hier ist es in der Manpage (siehe 3.6.6):
Das Format der Here-Dokumente ist:
<<[-]word here-document delimiter
Für Word wird keine Parametererweiterung, Befehlssubstitution, arithmetische Erweiterung oder Pfadnamenerweiterung durchgeführt . Wenn Zeichen in Wörtern in Anführungszeichen gesetzt werden, ist das Trennzeichen das Ergebnis der Entfernung von Anführungszeichen in Word, und die Zeilen im Dokument hier werden nicht erweitert. Wenn das Wort nicht in Anführungszeichen gesetzt ist, werden alle Zeilen des hier beschriebenen Dokuments einer Parametererweiterung, einer Befehlssubstitution und einer arithmetischen Erweiterung unterzogen. [...]
cat << "==end" > test
) verwenden, aber harte Anführungszeichen verhindern tatsächlich die Substitution.