De bash
manual:
Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal.
Assim:
$ RECORD_HDR="003D"
$ RECORD_SIZE=$((0x$RECORD_HDR))
$ echo "$RECORD_SIZE"
61
Estou simplesmente tentando converter uma string $RECORD_HDR
em um número $RECORD_SIZE
, onde
echo $RECORD_HDR
dá 003D
e
echo $RECORD_SIZE
deve dar 61
De bash
manual:
Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal.
Assim:
$ RECORD_HDR="003D"
$ RECORD_SIZE=$((0x$RECORD_HDR))
$ echo "$RECORD_SIZE"
61
Veja algumas maneiras:
Usando a calculadora bc
e definindo explicitamente a base de entrada (bastante portátil):
RECORD_SIZE='echo "ibase=16;$RECORD_HDR" | bc'
Usando avaliação aritmética com uma base explícita (ksh e bash, pelo menos - não tenho certeza de quão portátil é essa construção):
RECORD_SIZE=$((16#$RECORD_HDR))
Você pode usar a biblioteca de Velud do awk:
$ velour -n 'print mt_basecon("3D", 16, 10)'
61
Ou:
$ velour -n 'print mt_basecon(ARGV[1], 16, 10)' 3D
61
Tags bash shell-script arithmetic