我想编写一个小函数来确定两个数字之间存在的所有十六进制数字。
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
经常使用,可能有更好的方法来解决这个问题。