Bash (และเชลล์ unix อื่น ๆ ), 32 (33) ไบต์
ความพยายามครั้งแรกและครั้งที่สอง:
case `echo|od` in *5*)echo B;;*)echo L;;esac # portable
[[ `echo|od` =~ 5 ]]&&echo B||echo L # non-portable
ขอบคุณเดนนิสรุ่นที่สั้นกว่า:
od<<<a|grep -q 5&&echo L||echo B # non-portable
echo|od|grep -q 5&&echo B||echo L # portable
echoยูทิลิตี้เอาท์พุทขึ้นบรรทัดใหม่ที่มีค่า hex 0Aและไม่มีการส่งออกอื่น ๆ สำหรับมันเป็น<<<a61 0A
odยูทิลิตี้โดยค่าเริ่มต้นตีความการป้อนข้อมูลที่เป็นคำสองไบต์ศูนย์เบาะถ้าจำนวนไบต์เป็นเลขคี่และแปลงไปเป็นฐานแปด สิ่งนี้ส่งผลให้เอาท์พุตของเสียงก้องถูก interpred 0A 00ซึ่งถูกแปลง005000เป็น big-endian หรือ000012ใน little-endian 61 0Aกลายเป็นคน005141ตัวเล็ก ๆ และคนหัว060412โต เอาท์พุทเต็มรูปแบบของ od ยังรวมถึงที่อยู่และข้อมูลขนาดหมายความว่าเราไม่สามารถใช้0, 1หรือ2สำหรับการทดสอบ
คำสั่งได้รับการกำหนดอย่างดีเพื่อให้เห็นถึง endianness ของระบบ จากมาตรฐาน :
ลำดับไบต์ที่ใช้เมื่อตีความค่าตัวเลขกำหนดการใช้งาน แต่จะสอดคล้องกับลำดับที่ค่าคงที่ประเภทที่สอดคล้องกันถูกเก็บไว้ในหน่วยความจำบนระบบ
บันทึกความเข้ากันได้
ฉันไม่แน่ใจว่าจะใส่echo|odbackquotes โดยไม่ต้องใส่เครื่องหมายอัญประกาศคู่ล้อมรอบ [ซึ่งผลลัพธ์ในอาร์กิวเมนต์สามคำถึงcase] ได้รับการสนับสนุนในทุกระบบ ฉันไม่แน่ใจว่าทุกระบบรองรับเชลล์สคริปต์โดยไม่ต้องยกเลิกบรรทัดใหม่ ฉันแน่ใจว่าส่วนใหญ่ แต่ไม่ 100% ของพฤติกรรมของ od ด้วยการเพิ่ม padding byte ในระบบขนาดใหญ่ หากจำเป็นecho aสามารถใช้สำหรับรุ่นพกพา สคริปต์ทั้งหมดทำงานใน bash, ksh และ zsh และสคริปต์แบบพกพาทำงานได้อย่างรวดเร็ว