我是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"
这里应包含十六进制值。如何做到这一点。
答案 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
工具的标准输入。