64-битная переменная echo unsigned

У меня есть следующий шелл-код:

Val1=0123456789abcdef
Val2=fedcba9876543210

Val3_dec=$((16#$Val1 ^ 16#$Val2))
Val3=`echo "obase=16; $Val3_dec" | bc`
echo $Val1
echo $Val2
echo $Val3_dec 
echo $Val3

с соответствующим выводом:

0123456789abcdef
fedcba9876543210
-1
-1

к сожалению, выход Val3 подписан отрицательно, но мне нужно, чтобы он был 64-разрядным беззнаковым выходом в HEX. Подобно:

0123456789abcdef
fedcba9876543210
-1    (the output of Val3_dec does not matter)
ffffffffffffffff

Некоторые идеи?

1 ответ

Решение

Используйте printf:

#!/bin/bash
Val1=0123456789abcdef
Val2=fedcba9876543210

Val3_dec=$((16#$Val1 ^ 16#$Val2))
Val3=`echo "obase=16; $Val3_dec" | bc`
echo $Val1
echo $Val2
printf "%d\n" $Val3_dec 
printf "%x\n" $Val3

Результаты:

$ ./test.sh 
0123456789abcdef
fedcba9876543210
-1
ffffffffffffffff
Другие вопросы по тегам