Ben aradığım bir saf kabuk (printf saymak sürece) yukarıdaki cevap için @ rubo77 kudos vermek gerekir, hangi aradığını.
Bu, aşağıdakilere biraz sed ekler:
(a) her 16 bitlik öbekte herhangi bir önde gelen sıfırın elide edilmesi; ve
(b) IID'nin başlangıcında sıfırdan başka bir parça daha elid
... adres kısalığı için ortak sözleşmelere göre.
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/'
}
Bunu, EUI-64'ün herhangi bir kapsamda kullanılabileceğinden (gizlilik nedenleriyle global adresler için kullanmamanız önerilmesine rağmen) diğer (keyfi) önekler için yeniden kullanmak isterseniz, biraz ihtiyacınız olacaktır daha kıvrımlı sed komut dosyası. Çünkü fe80::
önek zaten IID'nin başlangıcına bitişik üç çift parça (iki nokta üst üste işaretli) içerir. Böylece, IID'nin ilk yığını tamamen sıfır olsa bile (yani MAC ile 02:00
başlasaydı), o da elid olurdu. EUI-64 formatı, yukarıdaki komut dosyasının tek bir sıfır olarak eklediği, yalnızca sıfır olan bir son yığın bırakır - sonuncusu -. Diğer önekler, iki kolon arasında tek bir sıfır bırakmayı gerektirebilir.