ในบางระบบwhich -aแสดงการแข่งขันทั้งหมด หากเปลือกของคุณเป็นทุบตีหรือzsh¹คุณสามารถใช้typeแทน: type fooแสดงการจับคู่ครั้งแรกและtype -a fooแสดงการแข่งขันทั้งหมด สามคำสั่งtype, whichและwhenceทำส่วนใหญ่เป็นสิ่งเดียวกัน; พวกเขาแตกต่างกันระหว่าง shells และระบบปฏิบัติการในสภาพพร้อมใช้งานตัวเลือกและสิ่งที่พวกเขารายงาน typeพร้อมใช้งานเสมอและแสดงชื่อเหมือนคำสั่งที่เป็นไปได้ทั้งหมด (นามแฝงคำหลักเชลล์ในตัวฟังก์ชันและคำสั่งภายนอก)
วิธีเดียวที่สามารถพกพาได้อย่างเต็มที่เพื่อแสดงการแข่งขันทั้งหมดคือการแยกวิเคราะห์$PATHตัวเอง นี่คือเชลล์สคริปต์ที่ทำสิ่งนี้ ถ้าคุณทำมันฟังก์ชั่นเปลือกให้แน่ใจว่าจะใส่ร่างกายของฟังก์ชั่นในวงเล็บ (เพื่อให้การเปลี่ยนแปลงIFSและset -fไม่ได้หลบหนีฟังก์ชั่น) และการเปลี่ยนแปลงไปexitreturn
#!/bin/sh
set -f # disable globbing
IFS=: # break words at : only
not_found=1
for d in $PATH; do
if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
printf '%s\n' "$d/$x"
not_found=0
fi
done
exit $not_found
¹
หรือ ksh 93 ตามเอกสารแม้ว่า ksh 93s + 2008-01-31 จะพิมพ์เฉพาะนัดแรกเมื่อฉันลอง
which --allในระบบของฉันมันเป็นสิ่งแรกที่แสดงบนหน้าคน: