Ich möchte eine Datei mit dem Befehl echo und dem Umleitungsoperator erstellen. Die Datei sollte aus wenigen Zeilen bestehen.
Ich habe versucht, eine neue Zeile mit "\ n" in die Zeichenfolge aufzunehmen:
echo "first line\nsecond line\nthirdline\n" > foo
Auf diese Weise wird jedoch keine Datei mit drei Zeilen erstellt, sondern eine Datei mit nur einer Zeile und dem wörtlichen Inhalt der Zeichenfolge.
Wie kann ich mit diesem Befehl eine Datei mit mehreren Zeilen erstellen?
shell
command-line
echo
newlines
Abdul Al Hazred
quelle
quelle
Antworten:
Sie haben nach einer Syntax für den
echo
Befehl gefragt :(Beachten Sie auch die andere Antwort, die Sie erhalten haben.)
Das
$'...'
Konstrukt erweitert eingebettete ANSI-Escape-Sequenzen.quelle
Was das Echo mit der Zeichenflucht macht, ist in der Implementierung definiert. In vielen Implementierungen von Echo (einschließlich der modernsten) wird die übergebene Zeichenfolge standardmäßig nicht auf Escape-Zeichen überprüft.
Mit dem von GNU bash (als eingebautes Element) bereitgestellten Echo und einigen anderen Echo-Varianten können Sie Folgendes tun:
Es hört sich jedoch wirklich so an, wie Sie es möchten
printf
, was für mich besser lesbar und auch portabler ist (dieses Feature ist in POSIX definiert):Sie können auch ein Dokument hier verwenden :
quelle
echo -en 'text..'
, während die akzeptierte Antwort mein Newline-Zeichen (\n
) nicht erkannte ,echo -en
tat das.Hier sind einige andere Möglichkeiten zum Erstellen einer mehrzeiligen Datei mit dem
echo
Befehl:Wobei der zweite und dritte
>>
Befehl den Umleitungsoperator verwenden, wodurch die Ausgabe des Befehls an die Datei angehängt (hinzugefügt) wird (die zu diesem Zeitpunkt bereits vorhanden sein sollte).Oder
Dabei gruppieren die Klammern die
echo
Befehle in einem Unterprozess, der aussieht und sich wie ein einzelnes Programm verhält, das mehrere Zeilen ausgibt (wiels
zum Beispiel).Eine subtile Variation des oben genannten ist
Dies ist etwas effizienter als die zweite Antwort, da kein Unterprozess erstellt wird. Die Syntax ist jedoch etwas kniffliger: Beachten Sie, dass Sie nach dem ein Leerzeichen
{
und vor dem ein Semikolon einfügen müssen}
.Siehe Was sind die Steuerungs- und Umleitungsoperatoren der Shell? für mehr Informationen.
quelle
Um noch eine weitere Option Enter anzugeben , können Sie einfach auf (dh einen wörtlichen Zeilenumbruch) klicken:
Beachten Sie, dass Sie das
>
am Anfang der zweiten Zeile nicht eingeben . Dies ist die sekundäre Shell-Eingabeaufforderung,$PS2
die die Shell ausgibt, wenn Sie einen unvollständigen Befehl eingeben (z. B. in diesem Fall einen Befehl mit einem nicht übereinstimmenden Anführungszeichen).quelle
POSIX 7 sagt, dass Sie nicht können
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
ist nicht definiert und Backslashes sind implementiert:es sei denn, Sie haben eine optionale XSI-Erweiterung.
Also benutze
printf
stattdessen:die Dateiformatnotation :
Beachten Sie auch, dass Ubuntu 15.10 und die meisten Distributionen
echo
beides implementieren :help echo
which echo
was zu Verwirrung führen kann.
quelle
echo
In jeder Shell, die auf dem System verfügbar ist , ist eine integrierte Shell vorhanden. Unter Ubuntu / bin / sh ist Bash in der Regel ebenfalls standardmäßig enthalten. zsh, rc, mksh, yash, csh, tcsh, ksh93 ... haben alle ein eigenes Echo mit unterschiedlichem Verhalten. Beachten Sie, dasswhich echo
der Pfad des Systemechos nicht in allen Shells angezeigt wird.which
war ursprünglich (in den 80ern) ein csh-script nur für csh-benutzer (lud die aliasnamen von ~ / .cshrc) und ist immer noch auf einigen systemen.which
ist in zsh und tcsh eingebaut.