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
และไม่มีการส่งออกอื่น ๆ สำหรับมันเป็น<<<a
61 0A
od
ยูทิลิตี้โดยค่าเริ่มต้นตีความการป้อนข้อมูลที่เป็นคำสองไบต์ศูนย์เบาะถ้าจำนวนไบต์เป็นเลขคี่และแปลงไปเป็นฐานแปด สิ่งนี้ส่งผลให้เอาท์พุตของเสียงก้องถูก interpred 0A 00
ซึ่งถูกแปลง005000
เป็น big-endian หรือ000012
ใน little-endian 61 0A
กลายเป็นคน005141
ตัวเล็ก ๆ และคนหัว060412
โต เอาท์พุทเต็มรูปแบบของ od ยังรวมถึงที่อยู่และข้อมูลขนาดหมายความว่าเราไม่สามารถใช้0
, 1
หรือ2
สำหรับการทดสอบ
คำสั่งได้รับการกำหนดอย่างดีเพื่อให้เห็นถึง endianness ของระบบ จากมาตรฐาน :
ลำดับไบต์ที่ใช้เมื่อตีความค่าตัวเลขกำหนดการใช้งาน แต่จะสอดคล้องกับลำดับที่ค่าคงที่ประเภทที่สอดคล้องกันถูกเก็บไว้ในหน่วยความจำบนระบบ
บันทึกความเข้ากันได้
ฉันไม่แน่ใจว่าจะใส่echo|od
backquotes โดยไม่ต้องใส่เครื่องหมายอัญประกาศคู่ล้อมรอบ [ซึ่งผลลัพธ์ในอาร์กิวเมนต์สามคำถึงcase
] ได้รับการสนับสนุนในทุกระบบ ฉันไม่แน่ใจว่าทุกระบบรองรับเชลล์สคริปต์โดยไม่ต้องยกเลิกบรรทัดใหม่ ฉันแน่ใจว่าส่วนใหญ่ แต่ไม่ 100% ของพฤติกรรมของ od ด้วยการเพิ่ม padding byte ในระบบขนาดใหญ่ หากจำเป็นecho a
สามารถใช้สำหรับรุ่นพกพา สคริปต์ทั้งหมดทำงานใน bash, ksh และ zsh และสคริปต์แบบพกพาทำงานได้อย่างรวดเร็ว