Ich bin neu in Ubuntu und lerne die ls
Argumente.
Ich habe die -b, --escape
Argumente getestet , (print C-style escapes for nongraphic characters)
aber kein nützliches Beispiel für die Verwendung gefunden.
Ich habe eine Datei mit dem Namen \*\?\¿\º\ª\?\¿\&\%\$\·SpecialCharacterfile.txt
mit erstellt touch
, aber wenn ich sie verwende ls
oder ls -b
sie auflistet.
*?¿ºª?¿&%$·SpecialCharacterfile.txt
Ich benutze Ubuntu 14.04.5 LTS
command-line
ls
Pau Chorro
quelle
quelle
Antworten:
Alle Ihre Charaktere sind grafisch (sie haben sichtbare Glyphen). Versuchen Sie es mit einem Dateinamen, der Leerzeichen und unsichtbare Zeichen enthält:
Ein wirklich nützliches Beispiel, bei dem die Ausgabe ansonsten schwierig wäre: Dateinamen, in die versehentlich das
\r
Zeichen eingefügt wurde, weil DOS-Dateiendungen irgendwo mitten in einer Operation im Weg waren:Ich habe dies tatsächlich in einem Beitrag auf U & L gesehen. Persönlich würde ich normalerweise
ls -q
zum Einfügen in die Befehlszeile selbst verwenden:Das Standardverhalten in neueren Versionen von
ls
istls -q
für die interaktive Verwendung: Warum schließt 'ls' Elemente plötzlich mit Leerzeichen in einfache Anführungszeichen ein?quelle
ls -q
dann mindestens eine andere Skriptsprache als Shell haben, haben Sie die Möglichkeit, kein Shell-Skript zu schreiben. Dies ist immer die richtige Wahl für alles, was kompliziert genugls -q
erscheint und nützlich erscheint.ls -q
impliziert das Vorhandensein einer Nicht-Shell-Skriptsprache die Verfügbarkeit?ls
mit einem-q
Flag bereitstellen, Systeme sind, die einen anderen Skriptinterpreter verwenden.ls
umfassende Sorgfalt jedoch immer eine sichere Analyse derls
Ausgabe. Tatsächlich habe ich eine sehr portable Shell-Polydatei für einenesceval
Befehl geschrieben, die eine portable Shell -zitierte Version jedes Arguments unter github.com/mentalisttraceur/esceval druckt (Shell-Polyfill befindet sich imsh
Verzeichnis, mit einer C-Version für die Leistung). .esceval *
Sie erhalten die Dateinamen, die sichereval
als Originale dienen. Mit äußerster Sorgfalt reicht dies aus, um diels
Ausgabe richtig zu handhaben .Beispiel Ich fand mich
Mit
-b
OptionIst die zweite nicht besser, wenn ich die Ausgabe an einer anderen Stelle in meinem Code verwenden möchte?
quelle
Die Art und Weise, wie Sie die Dateien erstellt haben, bestand wahrscheinlich darin, den Test direkt einzufügen. Um Dateien mit Backslash-Escapezeichen zu erstellen, müssen Sie die
$'...'
Art des Zitierens verwenden.Das Erstellen von Dateien sollte daher wie folgt erfolgen:
Und das
ls -b
wird uns ihre Darstellung zeigen:Während Standard
ls
nicht:Beachten Sie, dass Backslash-Escapezeichen in Dateien Ihre Skripte beschädigen können . Daher sollte man niemals ls analysieren . Und genau der Hauptzweck für
ls -b
- zu sehen, welche Dateinamen haben und möglicherweise Fehler zu beheben.quelle
Zusätzlich zu Murus Antwort, die erklärt, dass keines der Zeichen in Ihrem Dateinamen nicht grafisch ist, möchte ich darauf hinweisen, dass Ihr Dateiname tatsächlich keine Backslashes enthält (die Shell entfernt sie natürlich, wenn Sie den Befehl ausführen).
Wenn dies
-b
der Fall wäre , würden sie mit Escapezeichen gedruckt:quelle