Protože bc uříznul jedinou nulu, která tam měla zůstat. No, uděláme malou prasečinu:
$ stavregistru="0xff"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
11111111
$ stavregistru="0xEE"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
11101110
$ stavregistru="0xaa"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
10101010
$ stavregistru="0x55"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
01010101
$ stavregistru="0x11"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
00010001
$ stavregistru="0x00"; bc <<< "ibase=16; obase=2; `tr -d 'X' <<< ${stavregistru^^}`" | awk '{printf "%08d\n", $0}'
00000000
Teď tr neodebírá 0X, ale jen X, takže tam jedna nula navíc zůstane. Ale ta ničemu nevadí, funguje to.