Jika Anda tahu direktori saat ini mengandung setidaknya satu file yang tidak disembunyikan:
set -- *; echo "$#"
Ini jelas dapat digeneralisasikan untuk semua bola.
Dalam sebuah skrip, ini memiliki efek samping yang kadang-kadang tidak menguntungkan yaitu menimpa parameter posisi. Anda dapat mengatasinya dengan menggunakan subkulit atau dengan fungsi (versi Bourne / POSIX) seperti:
count_words () {
eval 'shift; '"$1"'=$#'
}
count_words number_of_files *
echo "There are $number_of_files non-dot files in the current directory"
Solusi alternatif adalah $(ls -d -- * | wc -l). Jika glob adalah *, perintah dapat disingkat menjadi $(ls | wc -l). Mem-parsing output lsselalu membuat saya gelisah, tapi di sini seharusnya berfungsi selama nama file Anda tidak mengandung baris baru, atau Anda lslolos darinya. Dan $(ls -d -- * 2>/dev/null | wc -l)memiliki keuntungan menangani kasus gumpalan yang tidak cocok dengan anggun (yaitu, mengembalikan 0 dalam kasus itu, sedangkan set *metode ini membutuhkan pengujian fiddly jika gumpalan mungkin kosong).
Jika nama file dapat berisi karakter baris baru, alternatifnya adalah menggunakan $(ls -d ./* | grep -c /).
Salah satu solusi yang mengandalkan meneruskan ekspansi bola dunia lsmungkin gagal dengan daftar argumen kesalahan terlalu lama jika ada banyak file yang cocok.