lstesta se a saída está indo para um terminal. Se a saída não estiver indo para um terminal, então -1é o padrão. (Isso pode ser substituído por um dos -C, -mou -xopções.)
Portanto, quando lsfor usado em um pipeline e você não o tiver substituído por outra opção, lsserá usado -1. Você pode confiar nisso porque esse comportamento é exigido pelo POSIX
Especificação POSIX
O POSIX requer -1como padrão sempre que a saída não for para um terminal:
A especificação POSIX :
O formato padrão será listar uma entrada por linha na saída padrão; as exceções são para terminais ou quando uma das opções -C, -m ou -x é especificada. Se a saída for para um terminal, o formato é definido pela implementação.
Essas três opções que substituem o formato padrão de coluna única são:
-C
Grava a saída da coluna de texto múltiplo com entradas classificadas nas colunas, de acordo com a sequência de intercalação. O número de colunas de texto e os caracteres separadores de coluna não são especificados, mas devem ser adaptados à natureza do dispositivo de saída. Esta opção desativa a saída de formato longo.
-m
formato de saída Stream; listar nomes de caminho na página, separados por um caractere <comma> seguido por um caractere <space>. Use um caractere <newline> como terminador da lista e após a sequência separadora quando não houver espaço em uma linha para a próxima entrada da lista. Esta opção desativa a saída de formato longo.
-x
O mesmo que -C, exceto que a saída da coluna de texto múltiplo é produzida com entradas classificadas nas colunas, em vez de para baixo. Esta opção desativa a saída de formato longo.
Documentação GNU
No manual GNU ls :
'-1'
'--format = coluna única'
Liste um arquivo por linha. Esse é o padrão para ls quando a saída padrão não é um terminal . Consulte também as opções -b e -q para suprimir a saída direta de caracteres de nova linha em um nome de arquivo. [Enfase adicionada]
Exemplos
Vamos criar três arquivos:
$ touch file{1..3}
Quando a saída vai para um terminal, o GNU lsescolhe usar um formato de várias colunas:
$ ls
file1 file2 file3
Quando a saída vai para um pipeline, a especificação POSIX exige que a coluna única seja o padrão:
$ ls | cat
file1
file2
file3
As três exceções que substituem o comportamento padrão de coluna única são -mseparadas por vírgula, -Cordenadas -xpor colunas e ordenadas por:
$ 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(largar o. * se não quiser contar essas). ou:ls -1d ./.* ./* | grep '^\./' | wc -l(como os nomes dos arquivos não podem conter '/')