Auf AskUbuntu habe ich einige Befehle gesehen, die recht kompliziert aussehen und viele Symbole enthalten. Um zu verstehen, wie diese Befehle aufgebaut sind, möchte ich wissen, wofür die Symbole stehen.
Beispielsweise:
find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
oder noch komplizierter:
echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"
Ich verstehe sehr gut, dass das Hinzufügen von Parametern wie -c
, --debug
bestimmte Auswirkungen auf den Hauptbefehl hat. Die Bedeutungen von diesen sind in fast allen Fällen auf den man
Seiten zu finden, das ist also nicht wirklich das, wonach ich suche.
Bitte versuchen Sie in Ihrer Antwort zu definieren, was die Symbole speziell tun, anstatt die Beispiele zu erläutern, die ich gegeben habe. Das könnte so aussehen:
" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...
Danke im Voraus
quelle
-c -D
etwas in Befehl 1 und etwas ganz anderes in Befehl 2 bedeuten könnte.Antworten:
Weitere Informationen finden Sie im Abschnitt zum Bash-Referenzhandbuch mit der Bezeichnung Shell-Operation und im Advanced Bash-Scripting-Handbuch, Kapitel 3 (Sonderzeichen) .
Ich beziehe mich immer dann auf diese, wenn ich etwas Neues über Shell-Scripting in Ubuntu / Linux lernen möchte.
Ich denke, Sie werden ABS Kapitel 3 am einfachsten finden, um für Ihre Zwecke zu navigieren. Alle Symbole sind ganz links auf der Seite mit einer Beschreibung direkt darunter zu sehen.
quelle
Leider müssen Sie zu den Manpages gehen, da die "Symbole" unterschiedliche Bedeutungen haben können, je nachdem, welcher Befehl sie liest.
Zum Beispiel in Ihrem ersten Befehl die Bedeutung von {} und \; abhängig vom find Befehl (man find). Die Bedeutung von Anführungszeichen in einem Argument für sed hängt entweder von sed oder bash ab (da es sich um einen Parameter in Anführungszeichen handelt, kann es sich möglicherweise um eine Shell-Sache handeln). Das ~ / ist definitiv eine Bash-Muster-Erweiterungssache.
Für den zweiten komplizierten Befehl ist es meistens ein Echo. Die meisten Informationen dazu finden Sie auf der man-Seite von bash.
Um Ihren Kommentar dazu zu beantworten, geben Sie die Umleitungszeichen> <| werden verwendet, um Daten aus und in Dateien zu leiten (die größer und kleiner als die Zeichen sind) und um die Ausgabe eines Befehls mit der Eingabe eines anderen Befehls zu verbinden (die Pipe |). Sehen Sie hier für ein schönes Tutorial auf I / O - Umleitung, dies ist ein sehr leistungsfähiges Design - Merkmal des Unix - Shell und Toolset.
quelle
>
? Das ist ein Zeichen, das ich auch oft sehe, ich dachte, es bedeutet "Kopie" oder so. Ist dieser auch befehlsabhängig?Erstens sucht man nach Dateien, die auf
.c
in einem Verzeichnis enden,~/
undexec
utessed
(Stromlinieneditor), in dems
gesuchtcybernetnews
und geändert wirdcybernet
.Der 2. entgeht mir ... zeigt bei der Ausführung ein leeres Ergebnis.
quelle
Die beste Ressource, die ich zum Erlernen von Terminalbefehlen gefunden habe, ist LinuxCommand . Es enthält detaillierte Beschreibungen der am häufigsten verwendeten verfügbaren Befehle.
quelle
Beim Einfügen komplexer Befehle ist es schwierig, die vollständige Bedeutung der Symbole zu erkennen.
Insbesondere das Echo.
Siehe man echo für das -e, es ermöglicht die Flucht, also ist lateer ein Flucht.
Die meisten anderen Symbole sind Zeichenfolgenmanipulationen.
Stellen Sie sich vor, Sie haben eine Variable, die einen String "foo" enthält.
Es wird jedoch komplexer, wenn Ihre Variable $ i auch Teil einer Zeichenfolge ist
Jetzt können Sie auch die Zeichenfolgen bearbeiten und nur einen Teil drucken
In deinem Fall
$ {i # * =} = print $ i, Entferne die kürzeste Übereinstimmung zwischen * und =, aber * selbst ist ein Platzhalter.
Siehe http://tldp.org/LDP/abs/html/string-manipulation.html
Als nächstes schlagen wir eine Sub-Shell (x ...)
Bash verarbeitet die Befehle in der Subshell und gibt die Ausgabe der Befehle zurück.
x = (eine Unterzeichenfolge von i); fortsetzen
Jetzt haben wir einen Test, ["$ {! X}"]
Siehe: http://tldp.org/LDP/abs/html/testconstructs.html
Und hier kann ich dir nichts mehr erzählen.
In der Bash wird $ {! X} eine leere Zeichenfolge sein. && == logisch und || ist logisch oder
test {leere Zeichenkette} AND echo leere Zeichenkette oder echo x
Sie müssten mehr Syntax angeben, aber es scheint, dass dieses Echo die Ausgabe irgendwo weiterleitet.
Wieder ist [] ein Test, und wir sind einem [ganz am Anfang entkommen.
Daher kann ich nur so viel erklären, was das Echo tut.
Der Grund, warum es keine Ausgabe gibt, wenn Sie den Echo-Befehl in ein Terminal eingeben, ist ein Code-Snipit. Standardmäßig ist weder x noch i definiert, sodass die gesamte Ausgabe leer ist.
quelle
Bei Fragen zu Symbolen in bestimmten Sprachen können Sie SymbolHound ausprobieren . Sie können im Web nach Zeichen suchen, die Google nicht findet.
quelle