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 ls
selalu membuat saya gelisah, tapi di sini seharusnya berfungsi selama nama file Anda tidak mengandung baris baru, atau Anda ls
lolos 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 ls
mungkin gagal dengan daftar argumen kesalahan terlalu lama jika ada banyak file yang cocok.