İş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/foo
baskı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
?