我正在将shell脚本(相当大的shell脚本)从bash移植到android (mksh )。
在安卓系统中,printf的工作方式似乎与其他Linux系统不同。
样本代码:
$ cat sample.sh
...
func1()
{
A=100
HEXA=`printf "%04x" ${A}`
echo "A - ${A} HEXA - ${HEXA}"
}
func1此函数的输出如下。
$ ./sample.sh
A - 100 HEXA - 300000078它打印了一个非常奇怪的数字。
我从其他帖子和mksh的手册中看到,不推荐在mksh中使用printf。我的shell脚本非常大,正在大量使用它。所以,我想以某种方式处理这件事。我有什么选择来处理这件事?
发布于 2016-11-19 13:49:39
在printf中修复toybox是很棒的。
但是,如果有人想在一个没有根的设备上打印一个转换成十六进制的数字(如果他们愿意的话,也可以打印出一个转换成十六进制的数字(或者几乎任何其他合理的基础,从2到36 )),那么使用旧的toybox (或者根本没有toybox )--以下是使用typeset内置的mksh的一种方法。
baseconv(){ typeset -Ui${3:-16} -Z35 x=$1; echo ${x: -${2:-8}};}
func1()
{
A=100
HEXA=$(baseconv $A 4 16)
echo "A - ${A} HEXA - ${HEXA}"
}或者为printf "%04x"的情况创建一个特定的函数:
printf04x(){ typeset -Ui16 -Z7 x=$1; echo ${x: -4};}
func1()
{
A=100
echo "A - ${A} HEXA - $(printf04x $A)"
}发布于 2016-11-19 02:11:47
Android中的printf正在链接到玩具盒。
root:/ # which printf
/system/bin/printf
root:/ # ls -l /system/bin/printf
lrwxr-xr-x root shell 2016-11-14 21:02 printf -> toybox所以问题就出现在了玩具盒的版面上。
现在问题已经解决了- https://github.com/landley/toybox/issues/54。
https://stackoverflow.com/questions/40668399
复制相似问题