Число определяет количество байтов, а не символов
£ в UTF-8 имеет ширину 2 байта (0xc2 0xa3), таким образом:
printf "blob 6\0hola£" | shasum
это то, что вы хотите
, который возвращает 8f9852933655612593d0bbd43c9f7c6f25d947a0
как ожидалось.
Проверьте себя:
Распаковать содержимое только что написанного объекта:
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - .git/objects/8f/9852933655612593d0bbd43c9f7c6f25d947a0 | gzip -dc | xxd
(или используйте pigz: Инструмент командной строки Deflate )