İşte dizinlerin içeriğini listeleyen bir fonksiyon $PATH. Bağımsız değişkenler iletildiyse, işlev yalnızca adı bağımsız değişkenlerden birini içeren komutları listeler. Argümanlar glob kalıpları olarak yorumlanır.
shopt -s extglob
lspath () {
local IFS pattern
IFS='|'
pattern="*@($*)*"
IFS=':'
for d in $PATH; do
for x in "$d/"$pattern; do
[ "$x" = "$d/$pattern" ] || echo "${x##*/}"
done
done | sort -u
}
Birçok şey gibi, bu zsh'da daha kolaydır.
lspath () {
(($#)) || set ''
print -lr -- $^path/*$^@*(N:t) | sort -u
}
^Karakter parametresi genişleme dizisi ile birleştirilmiş metin, her bir dizi elemanı, örneğin, ilave neden olur path=(/bin /usr/bin); echo $^path/foobaskılar /bin/foo /usr/bin/foo.
/*$^@*çizgi roman hakaretine benziyor ancak aslında sıradan karakter /, joker karakter *, değiştiricili özel parametre $@(konumsal parametre dizisi) ^ve tekrar *.
(N:t)olan topak eleme N ardından hiçbir eşleşme varsa boş bir genişleme almak için tarih değiştirici t her maçın sadece basename ( “kuyruk”) tutmak.
Daha şifreli, dış çağrıdan kaçınır, ancak bu sadece kozmetik ilgi çekicidir:
lspath () {
(($#)) || set ''
local names; names=($^path/*$^@*(N:t))
print -lr -- ${(ou)names}
}
Aslında apropos, kısa açıklaması bir anahtar kelime içeren komutların man sayfalarını arayan komutu arıyor olabilirsiniz . Bir sınırlama, bunun yalnızca bir man sayfası olan komutları bulmasıdır.
ls -la?