Shell脚本:十六进制循环

Nir*_*iya 0 linux bash shell

我正在尝试学习shell脚本并编写一个简单的脚本来增加循环中的Hex值.

这是我的脚本:

increment=0x0001
handle=0x0001

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

这是我的输出:

0x0001
2
3
4
5
6
7
8
9
a
1
2
3
4
5
6
7
8
9
a
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到第10次迭代,但之后再次从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
Run Code Online (Sandbox Code Playgroud)

实际上我只想在HEX中输出.

Ini*_*ian 6

它与你如何打印值try printf '%#x'printf '%#X'

只需更改您用于打印内容的行,其前导0x为: -

handle=$(printf '%#x' $handle) 
Run Code Online (Sandbox Code Playgroud)

(或)具有前导十六进制字符 0X

handle=$(printf '%#X' $handle) 
Run Code Online (Sandbox Code Playgroud)

通过更改,您可以获得如下输出: -

$ ./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
Run Code Online (Sandbox Code Playgroud)

有关更多格式选项,请点击此处: - http://wiki.bash-hackers.org/commands/builtin/printf(和)http://ss64.com/bash/printf.html