Depende principalmente de su versión del kernel de Linux.
Debería poder ver el límite de su sistema ejecutando
getconf ARG_MAX
que le indica el número máximo de bytes que puede tener una línea de comando después de ser expandida por el shell.
En Linux <2.6.23, el límite suele ser de 128 KB.
En Linux> = 2.6.25, el límite es 128 KB o 1/4 del tamaño de su pila (ver ulimit -s), el que sea mayor.
Consulte la página del comando man execve (2) para obtener todos los detalles.
Desafortunadamente, las tuberías ls *.txtno van a solucionar el problema, porque el límite está en el sistema operativo, no en el shell.
El shell expande el *.txt, luego intenta llamar
exec("ls", "a.txt", "b.txt", ...)
y tiene tantos archivos *.txtque coinciden que excede el límite de 128 KB.
Tendrás que hacer algo como
find . -maxdepth 1 -name "*.txt" | wc -l
en lugar.
(Y vea los comentarios de Shawn J. Goff a continuación sobre los nombres de archivos que contienen nuevas líneas).
ls, lo cual es una mala idea, así que mejor evítelo. Para contar, vea ¿Cuál es la mejor manera de contar la cantidad de archivos en un directorio? , para una solución alternativa difícil, ¿por qué for loop no genera un error de "argumento demasiado largo"? .