İşlev çağrınız yanlış:
Pdir($i) # this is wrong
Bash'de, tıpkı ikili çalıştırılabilir dosyaları çağırdığınız gibi, isimlerini komut olarak yazıp tüm argümanları arkasına koyarak, boşluklarla ayrılmış ve herhangi bir parantez içine alınmamış olarak çağırırsınız:
Pdir $i # this is correct, but not good
Unutmayın ki değişkenleri hemen hemen her zaman çift tırnak içine almalısınız, boşluk bırakmaları halinde ayrılmalarını ve çoklu argümanlar olarak yorumlanmalarını engellemek için en iyi yol şöyle olacaktır:
Pdir "$i" # this is how you do it
Bir diğer küçük hata ifda [test ile test arasında bir boşluğa ihtiyacınız olması .
Ayrıca değişkeni tekrar alıntılamalısınız ve bunun $(...)yerine daha modern komut değiştirme sözdizimini kullanmanız önerilir `...`. İkame kendisi çift tırnak içine alınmış olsa bile komut ikame parantezleri içindeki çift tırnak işaretine izin verildiğine dikkat edin.
if [ "$(stat -c %F "${a[$i]}")" = "directory" ]
Ve yerine çıkışını yorumlama ls( Neden değil ayrıştırmak ls? ), O kadar iyi geçerli dizin eg dosya ve dizinleri bir dizi almak için bir kabuk topak kullanılarak :
a=(*)
Varsayılan olarak, bunun sadece gizli olmayan dosyaları, yani bir nokta ile başlamayan her şeyi döndürdüğünü unutmayın. Gizli dosyaları ve dizinleri de listelemek dotglobiçin önce betiğinizin içindeki kabuk seçeneğini etkinleştirin :
shopt -s dotglob
a=(*)