ls
sprawdza, czy wyjście trafia do terminala. Jeśli dane wyjściowe nie trafiają do terminala, to -1
jest to ustawienie domyślne. (To może być zmieniona przez jednego z -C
, -m
lub -x
opcji).
Tak więc, gdy ls
jest używany w potoku i nie zastąpiłeś go inną opcją, ls
użyje -1
. Możesz na tym polegać, ponieważ takie zachowanie jest wymagane przez POSIX
Specyfikacja POSIX
POSIX wymaga -1
domyślnie, gdy dane wyjściowe nie trafiają do terminala:
Specyfikacja POSIX :
Domyślnym formatem jest wypisanie jednego wpisu w wierszu na standardowe wyjście; wyjątki dotyczą terminali lub gdy podano jedną z opcji -C, -m lub -x. Jeśli dane wyjściowe dotyczą terminala, format jest zdefiniowany w implementacji.
Te trzy opcje, które zastępują domyślny format jednokolumnowy to:
-C
Napisz wielotekstowy wynik z kolumn posortowanych według kolumn, zgodnie z kolejnością zestawiania. Liczba kolumn tekstowych i znaki separatora kolumn są nieokreślone, ale należy je dostosować do charakteru urządzenia wyjściowego. Ta opcja wyłącza wyjście w długim formacie.
-m
Format wyjściowy strumienia; wypisz nazwy ścieżek na całej stronie, oddzielone znakiem <comma>, a następnie znakiem <space>. Użyj znaku <nowa linia> jako terminatora listy i po sekwencji separatora, gdy w linii nie ma miejsca na następny wpis na liście. Ta opcja wyłącza wyjście w długim formacie.
-x
Taki sam jak -C, z wyjątkiem tego, że dane wyjściowe z wielu kolumn tekstowych są tworzone z wpisami posortowanymi w poprzek kolumn, a nie w dół, w kolumnach. Ta opcja wyłącza wyjście w długim formacie.
Dokumentacja GNU
Z podręcznika GNU ls :
„-1”
--format = pojedyncza kolumna ”Wyświetla
jeden plik w wierszu. Jest to ustawienie domyślne dla ls, gdy standardowe wyjście nie jest terminalem . Zobacz także opcje -b i -q, aby ukryć bezpośrednie wyświetlanie znaków nowego wiersza w nazwie pliku. [Podkreślenie dodane]
Przykłady
Utwórzmy trzy pliki:
$ touch file{1..3}
Gdy dane wyjściowe trafiają do terminala, GNU ls
decyduje się na użycie formatu wielokolumnowego:
$ ls
file1 file2 file3
Gdy dane wyjściowe trafiają do potoku, specyfikacja POSIX wymaga, aby domyślna była jedna kolumna:
$ ls | cat
file1
file2
file3
Trzy wyjątki, które zastępują domyślne zachowanie -m
dla pojedynczej kolumny, dotyczą rozdzielania przecinkiem, -C
sortowania kolumn i -x
sortowania według kolumn:
$ 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
(upuść. *, jeśli nie chcesz liczyć tych). lub:ls -1d ./.* ./* | grep '^\./' | wc -l
(ponieważ nazwy plików nie mogą zawierać „/”)