$PATH
ต่อไปนี้เป็นฟังก์ชั่นที่แสดงรายการเนื้อหาของไดเรกทอรีที่ ถ้าผ่านการขัดแย้งฟังก์ชั่นจะแสดงรายการคำสั่งที่มีชื่อมีข้อโต้แย้งอย่างใดอย่างหนึ่ง อาร์กิวเมนต์ถูกตีความเป็นรูปแบบ glob
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
}
เช่นเดียวกับหลาย ๆ สิ่งนี่เป็นเรื่องง่ายใน zsh
lspath () {
(($#)) || set ''
print -lr -- $^path/*$^@*(N:t) | sort -u
}
^
ตัวละครในการขยายตัวพารามิเตอร์ทำให้เกิดข้อความที่ตัดแบ่งกับอาร์เรย์ที่จะเพิ่มให้กับแต่ละองค์ประกอบอาร์เรย์เช่นพิมพ์path=(/bin /usr/bin); echo $^path/foo
รูปลักษณ์ที่เหมือนดูถูกหนังสือการ์ตูน แต่ในความเป็นจริงตัวอักษรธรรมดา, ตัวแทนพารามิเตอร์พิเศษ(อาร์เรย์ของพารามิเตอร์ตำแหน่ง) การที่มีตัวปรับแต่งและอีกครั้ง เป็นตัวระบุแบบกลมเพื่อให้ได้ส่วนขยายที่ว่างเปล่าหากไม่มีคู่ที่ตรงกันตามด้วยตัวแก้ไขประวัติเพื่อเก็บเฉพาะชื่อเบส ("หาง") ของแต่ละคู่/bin/foo /usr/bin/foo
/*$^@*
/
*
$@
^
*
(N:t)
N
t
ความลับเพิ่มเติมหลีกเลี่ยงการโทรจากภายนอก แต่นี่เป็นเพียงความสนใจด้านเครื่องสำอาง:
lspath () {
(($#)) || set ''
local names; names=($^path/*$^@*(N:t))
print -lr -- ${(ou)names}
}
ในความเป็นจริงคุณอาจกำลังมองหาapropos
คำสั่งซึ่งค้นหาหน้าคนของคำสั่งที่มีคำอธิบายสั้น ๆ ที่มีคำหลัก ข้อ จำกัด คือการค้นหาเฉพาะคำสั่งที่มี man page
ls -la
อย่างไร