如何在shell脚本中存储十六进制值

时间:2014-07-10 11:53:19

标签: shell

我是shellcript的新手

我有这个程序

for(( s=0x001; s <=0x00f; s++))
do
echo $s
done

我想将s值打印为1,2,3,4.....a,b,c,d,e,f

但是当我在程序之上运行时,我看到输出为1,2,3,4,5,6......13,14,15.

我只想打印十六进制值。

如何在pipe中传递十六进制值。让我说我必须在管道中传递这个十六进制以及其他一些参数。怎么做?

Lets说我必须传递一些参数来访问管道中的设备驱动程序。

echo "8 $s q" | /usr/sbin/tejas/test /dev/slot$1/tupp_fpga$devNo | grep "at offset"

这里应包含十六进制值。如何做到这一点。

3 个答案:

答案 0 :(得分:3)

我认为printf "%x" $s应该这样做。它是POSIX标准的一部分,并作为bash中的内置命令实现:

$ type printf
printf is a shell builtin

...所以文档可以在man bash中找到,至少对于Bash shell。

答案 1 :(得分:3)

使用printf命令。它的标准和工作或多或少类似于C函数。

printf "%x\n" $s

答案 2 :(得分:0)

我不太确定了解更新的问题,但是......

...如果您需要给定的格式,那么这样的工作就可以完成:

print "8 %x q" $s | /usr/sbin/tejas/test /dev/slot$1/tupp_fpga$devNo | grep "at offset"

如果您不熟悉 printf 式函数,请参阅描述various format可用的许多网页之一。

在这种特殊情况下,格式字符串中的%x将被下一个参数的十六进制表示替换。鉴于s变量保持值10 10 (或0xA 16 或013 8 - 这些确实相同) ,printf内部命令会将字符串8 a s写入/usr/sbin/tejas/test工具的标准输入。