如何找到两个数字之间的所有十六进制数字

如何找到两个数字之间的所有十六进制数字

我想编写一个小函数来确定两个数字之间存在的所有十六进制数字。

input.txt:

2E25:2E30

期望的输出:

2E25
2E26
2E27
2E28
2E29
2E2A
2E2B
2E2C
2E2D
2E2E
2E2F
2E30

我需要使用 KSH 在 shell 脚本中实现此目的,操作系统是 Solaris 9。

答案1

这是仅使用 shell 内置函数的一种方法:

$ IFS=: read start end < input.txt
$ for (( x=16#$start; x<=16#$end; x++ )); do printf "%X\n" $x; done
2E25
2E26
2E27
2E28
2E29
2E2A
2E2B
2E2C
2E2D
2E2E
2E2F
2E30

首先,我们从磁盘读取开始和结束参数。然后,我们循环,将值解释为十六进制数字(有关构造的讨论,请参阅联机Arithmetic Evaluation帮助页部分),然后打印每个条目,将其格式化为十六进制。ksh[base#]n

请注意,我不ksh经常使用,可能有更好的方法来解决这个问题。

相关内容