Shell脚本:十六进制循环

3
我是一个有用的助手,可以为您翻译文本。
我正在尝试学习Shell脚本,并编写一个简单的脚本来在循环中递增十六进制值。
以下是我的脚本:
increment=0x0001
handle=0x0001

for((i=1;i<=20;i++))
do
   echo $handle
   handle=$(($handle + $increment))
   handle=$(printf '%x' $handle)
done

这是我的输出:

0x0001
2
3
4
5
6
7
8
9
a
1
2
3
4
5
6
7
8
9
a

前十次迭代正常工作,但之后又从1开始了。

有人能告诉我我的错误吗?

编辑:删除handle=$(printf '%x' $handle)这一行后的输出为:

0x0001
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

实际上,我只想要十六进制输出。

我不完全理解你的问题,但你可以使用以下循环体来解决它:printf '%x\n' $handle; handle=$(( $handle + $increment )) - Aaron
1个回答

8

这与您打印值的方式有关,请尝试使用printf '%#x'printf '%#X'

只需更改您用于打印内容的行,并在前面添加0x 即可:

handle=$(printf '%#x' $handle) 

(或)将前导十六进制字符设为0X

handle=$(printf '%#X' $handle) 

通过这些更改,你将获得如下输出结果:-
$ ./script.sh 
0x0001
0x2
0x3
0x4
0x5
0x6
0x7
0x8
0x9
0xa
0xb
0xc
0xd
0xe
0xf
0x10
0x11
0x12
0x13
0x14
0x15
0x16
0x17
0x18
0x19
0x1a
0x1b
0x1c
0x1d
0x1e
0x1f
0x20

更多格式选项请参考以下链接:http://wiki.bash-hackers.org/commands/builtin/printfhttp://ss64.com/bash/printf.html


我遇到了一个错误:第7行:‘0x2’ + 0x0001:语法错误:无效的算术运算符(错误标记为"??0x2’ + 0x0001") - Nirav Gadhiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接