ls
Testet, ob die Ausgabe an ein Terminal gesendet wird. Wenn die Ausgabe nicht an ein Terminal gesendet wird, -1
ist dies die Standardeinstellung. (Dies kann durch eine der außer Kraft gesetzt werden -C
, -m
oder -x
Optionen.)
Wenn ls
also in einer Pipeline verwendet wird und Sie sie nicht mit einer anderen Option überschrieben haben, ls
wird verwendet -1
. Darauf können Sie sich verlassen, da dieses Verhalten von POSIX gefordert wird
POSIX-Spezifikation
POSIX erfordert -1
als Standard, wann immer die Ausgabe nicht an ein Terminal geht:
Die POSIX-Spezifikation :
Das Standardformat besteht darin, einen Eintrag pro Zeile für die Standardausgabe aufzulisten. Ausnahmen sind Terminals oder die Angabe einer der Optionen -C, -m oder -x. Wenn die Ausgabe an ein Terminal erfolgt, ist das Format implementierungsdefiniert.
Diese drei Optionen, die das standardmäßige einspaltige Format überschreiben, sind:
-C
Schreiben Sie eine Ausgabe in mehreren Textspalten mit Einträgen, die nach der Sortierfolge in den Spalten sortiert sind. Die Anzahl der Textspalten und die Spaltentrennzeichen sind nicht angegeben, sollten jedoch an die Art des Ausgabegeräts angepasst werden. Diese Option deaktiviert die Ausgabe im Langformat.
-m
Stream Ausgabeformat; Listen Sie die Pfadnamen auf der Seite auf, getrennt durch ein <Komma>, gefolgt von einem <Leerzeichen>. Verwenden Sie ein <newline> -Zeichen als Listenabschlusszeichen und nach der Trennzeichenfolge, wenn in einer Zeile kein Platz für den nächsten Listeneintrag vorhanden ist. Diese Option deaktiviert die Ausgabe im Langformat.
-x Entspricht
-C, mit der Ausnahme, dass die Ausgabe in mehreren Textspalten mit Einträgen erstellt wird, die über die Spalten hinweg und nicht nach unten sortiert sind. Diese Option deaktiviert die Ausgabe im Langformat.
GNU-Dokumentation
Aus dem GNU-Handbuch :
'-1'
'--format = einspaltig' Listet
eine Datei pro Zeile auf. Dies ist die Standardeinstellung für ls, wenn die Standardausgabe kein Terminal ist . Siehe auch die Optionen -b und -q, um die direkte Ausgabe von Zeilenumbrüchen innerhalb eines Dateinamens zu unterdrücken. [Betonung hinzugefügt]
Beispiele
Lassen Sie uns drei Dateien erstellen:
$ touch file{1..3}
Wenn die Ausgabe an ein Terminal geht, ls
wählt GNU die Verwendung eines mehrspaltigen Formats:
$ ls
file1 file2 file3
Wenn die Ausgabe an eine Pipeline gesendet wird, erfordert die POSIX-Spezifikation, dass die Standardeinstellung einspaltig ist:
$ ls | cat
file1
file2
file3
Die drei Ausnahmen, die das Standardverhalten für einzelne Spalten außer Kraft setzen, gelten -m
für kommagetrennte, -C
nach unten sortierte und -x
nach oben sortierte Spalten:
$ ls -m | cat
file1, file2, file3
$ ls -C | cat
file1 file2 file3
$ ls -x | cat
file1 file2 file3
n=0; for i in .* *; do ((n++)) ; done ; echo $n
(lassen Sie das. * fallen, wenn Sie diese nicht zählen möchten). oder:ls -1d ./.* ./* | grep '^\./' | wc -l
(da Dateinamen nicht '/' enthalten dürfen)