Wie kann ich folgende Inhalte in eine Datei eintragen:
Hi
abcd
Ich habe versucht, zu verwenden echo "Hi\nabcd" >> ab.txt
, aber in der Datei steht es so, wie es ist (das \n
ist anstelle einer neuen Zeile eingefügt).
Antwort1
Sie müssen angeben, echo
dass Escape-Sequenzen beachtet werden sollen.
echo -e "Hi\nabcd" >> ab.txt
Antwort2
Antwort3
Ich würde vorschlagen,Bash-Shell-Funktion namensHier Dokument. Scheint die eleganteste Form zu sein, um das zu erreichen, was Sie beschreiben. Am wichtigsten ist, dass der mehrzeilige Inhalt genauso aussieht, wie Sie ihn in der Ausgabedatei haben würden (im Gegensatz zu unlesbaren, langen, \n
getrennten Zeichenfolgen).
cat > ab.txt <<EOL
Hi
abcd
EOL
Hier EOL
ist der Marker, der angibt, wonach die Shell suchen soll, um das Ende deshier Dokument. Sie können ein Wort beliebig auswählen, das Ihnen erlaubt, etwas zu wählen, das nicht zufällig mit dem kollidierthier Dokument's Inhalt selbst. Das Schöne ist, dass Sie eine Shell haben könnten ${VARIABLES}
, die ersetzt wird. Wenn das irgendwie unerwünscht ist, können Sie das öffnende (nur das öffnende!) Markierungswort immer in Anführungszeichen ( '
) setzen, um dies zu verhindern.
Ich persönlich verwende dies häufig in den Init-Skripten, um beim Einrichten meiner Umgebung kleine Konfigurationsdateien zu erstellen, etwa so:
cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER
Antwort4
Mit Zitaten kann man auch spielen:
% echo 'Hi
> abcd' >> ab.txt
Sie geben das in Bash ein, indem Sie nach „Hi“ die Eingabetaste drücken. Bash verwendet für mich „>“ als Eingabeaufforderung zur Fortsetzung des Befehls. Aus irgendeinem Grund konnte ich einer einzelnen Eingabe nicht mit einem Backslash entkommen.