ฉันต้องให้ความรุ่งโรจน์แก่ @ rubo77 ด้านบนเพื่อหาคำตอบของ shell-pure (เว้นแต่คุณจะนับ printf) ซึ่งฉันได้ค้นหา
นี่เป็นการเพิ่มความน่าสนใจให้กับ:
(a) ลบเลขศูนย์นำหน้าในแต่ละก้อนขนาด 16 บิต และ
(b) กำจัดชิ้นส่วนทั้งหมดที่เป็นศูนย์เพิ่มเติมในตอนเริ่มต้นของ IID
... ตามแบบแผนทั่วไปสำหรับช่วงเวลาสั้น ๆ ที่อยู่
mac_to_eui64() {
IFS=':'; set $1; unset IFS
echo "fe80::$(printf %x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6" |
sed -E 's/:0+/:/g; s/:{3,}/::/; s/:$/:0/'
}
โปรดทราบว่าหากคุณต้องการนำสิ่งนี้ไปใช้กับส่วนนำหน้าอื่น ๆ (โดยพลการ) ซึ่งคุณอาจใช้เนื่องจาก EUI-64 สามารถใช้งานได้ในทุกขอบเขต (แม้ว่าจะไม่แนะนำให้ใช้สำหรับที่อยู่ทั่วโลกด้วยเหตุผลเรื่องความเป็นส่วนตัว) สคริปต์ sed ที่ซับซ้อนมากขึ้น นั่นเป็นเพราะfe80::
คำนำหน้ามีสามส่วนศูนย์ (elided ไปยังลำไส้คู่) ที่อยู่ติดกับจุดเริ่มต้นของ IID ดังนั้นแม้ว่าก้อนแรกของ IID จะเป็นศูนย์ทั้งหมด (นั่นคือถ้า MAC เริ่มต้นด้วย02:00
) ก็จะถูกลบออกเช่นกัน รูปแบบ EUI-64 เหลือเพียงหนึ่งอันเพิ่มเติมที่อาจเป็นศูนย์ทั้งหมดซึ่งเป็นรูปแบบสุดท้ายซึ่งสคริปต์ด้านบนจะรวมกลับเป็นศูนย์เดียว คำนำหน้าอื่น ๆ อาจต้องการให้เหลือศูนย์เดียวระหว่างสองโคลอน