Shell脚本:对于base来说价值太大了(错误令牌是" 16#?")

时间:2016-05-24 06:47:51

标签: linux bash shell

我是shell脚本的新手。我正在使用Hex值并编写一个简单的减法脚本。这是我的剧本:

#!/bin/bash

var1=“0x0001”
var2=“0x0005”
var3=“$(( 16#$var2 - 16#$var1 ))”
echo “Diference $var3”

我收到此错误:

line 6: 16#?: value too great for base (error token is "16#?")
你可以告诉我我的错误在哪里吗?

2 个答案:

答案 0 :(得分:2)

$ var1=0x0001
$ var2=0x0005
$ var3=$(( $var2 - $var1 ))
$ echo "Diference $var3"
Diference 4

指定不带双引号的十六进制值(即不作为字符串) 由于您已经放置0x,因此不需要16#

要将答案转换回十六进制,您可以使用:

printf '%x' $num

以下是一个例子:

$ var1=0x19
$ var2=0xA
$ var3=$(( $var1 - $var2 ))
$ echo $var3
15
$ printf '%x\n' $var3
f
$ var3=$(printf '%x' $var3)
$ echo $var3
f

答案 1 :(得分:2)

16#0x是多余的,互相排斥。问题在于,由于16#,Bash认为x试图成为基数为16的数字(而它仅在34或更高的基数中有效)。只需删除16#0x,它就可以正常工作。