bash 스크립트의 문자열을 특정 베이스에서 해석되는 숫자로 변환하는 방법은 무엇입니까?

bash 스크립트의 문자열을 특정 베이스에서 해석되는 숫자로 변환하는 방법은 무엇입니까?

$RECORD_HDR문자열을 숫자로 변환하고 싶습니다 $RECORD_SIZE.

echo $RECORD_HDR003D를 제공하고 echo $RECORD_SIZE61을 제공해야 합니다.

답변1

bash매뉴얼 에서 :

0으로 시작하는 상수는 8진수로 해석됩니다. 앞에 0x 또는 0X가 있으면 16진수를 나타냅니다.

그러므로:

$ RECORD_HDR="003D"
$ RECORD_SIZE=$((0x$RECORD_HDR))
$ echo "$RECORD_SIZE"
61

답변2

이를 수행하는 방법에는 여러 가지가 있습니다.

bc계산기를 사용하여 입력 기준을 명시적으로 설정합니다(매우 이식 가능).

RECORD_SIZE=`echo "ibase=16;$RECORD_HDR" | bc`

명시적 기반을 사용하여 산술 평가를 사용합니다(적어도 ksh 및 bash - 이 구성이 얼마나 이식 가능한지는 잘 모르겠습니다).

RECORD_SIZE=$((16#$RECORD_HDR))

답변3

awk를 사용할 수 있습니다.벨벳 도서관:

$ velour -n 'print mt_basecon("3D", 16, 10)'
61

또는:

$ velour -n 'print mt_basecon(ARGV[1], 16, 10)' 3D
61

관련 정보