linux - shell 脚本 : Hexadecimal Loop

标签 linux bash shell

我正在尝试学习 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

它在第 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

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

最佳答案

它与打印值的方式有关,请尝试 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/printf (和)http://ss64.com/bash/printf.html

关于linux - shell 脚本 : Hexadecimal Loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37409655/

相关文章:

linux - 如何在 Unix shell 脚本中为任何目录结构构建文件夹路径

linux - 需要 bash 帮助的初学者

linux - 如何将一个查询的结果连接到另一个查询

python - 从 python 调用时出现段错误,但从命令行正常运行

http - 写一个shell脚本来telnet一个http网站?

包含反引号的 Linux 管道数据

linux - 通过文本文件调用脚本(程序名称)

linux - 无法为用户将 key 添加到远程计算机

linux - 以编程方式更改新创建的 AWS 实例的主机名

linux - 将 awk,sed 输出设置为 Bash 中的变量