在 android shell 中对十六进制值使用 "printf"
Using "printf" for hex values in android shell
我正在将我的 shell 脚本(相当大的 shell 脚本)从 bash 移植到 android shell (mksh shell) .
在 Android 中,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 脚本非常大,正在大量使用它。所以,我想以某种方式处理这个问题。我有什么选择来处理这个问题?
Android 中的 printf 链接到 toybox
root:/ # which printf
/system/bin/printf
root:/ # ls -l /system/bin/printf
lrwxr-xr-x root shell 2016-11-14 21:02 printf -> toybox
原来问题出在 toybox printf 上。
在 toybox
中修复 printf
很棒。
但是万一有人想打印出一个转换为 hex 的数字(或者几乎任何其他合理的 base 来自 2
到 36
如果他们愿意的话)在 无根的 设备上使用旧的 toybox
(或者根本没有 toybox
)-这是一种使用 mksh
:
内置的 typeset
的方法
baseconv(){ typeset -Ui${3:-16} -Z35 x=; echo ${x: -${2:-8}};}
func1()
{
A=100
HEXA=$(baseconv $A 4 16)
echo "A - ${A} HEXA - ${HEXA}"
}
或者只为 printf "%04x"
案例创建一个特定函数:
printf04x(){ typeset -Ui16 -Z7 x=; echo ${x: -4};}
func1()
{
A=100
echo "A - ${A} HEXA - $(printf04x $A)"
}
我正在将我的 shell 脚本(相当大的 shell 脚本)从 bash 移植到 android shell (mksh shell) .
在 Android 中,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 脚本非常大,正在大量使用它。所以,我想以某种方式处理这个问题。我有什么选择来处理这个问题?
Android 中的 printf 链接到 toybox
root:/ # which printf
/system/bin/printf
root:/ # ls -l /system/bin/printf
lrwxr-xr-x root shell 2016-11-14 21:02 printf -> toybox
原来问题出在 toybox printf 上。
在 toybox
中修复 printf
很棒。
但是万一有人想打印出一个转换为 hex 的数字(或者几乎任何其他合理的 base 来自 2
到 36
如果他们愿意的话)在 无根的 设备上使用旧的 toybox
(或者根本没有 toybox
)-这是一种使用 mksh
:
typeset
的方法
baseconv(){ typeset -Ui${3:-16} -Z35 x=; echo ${x: -${2:-8}};}
func1()
{
A=100
HEXA=$(baseconv $A 4 16)
echo "A - ${A} HEXA - ${HEXA}"
}
或者只为 printf "%04x"
案例创建一个特定函数:
printf04x(){ typeset -Ui16 -Z7 x=; echo ${x: -4};}
func1()
{
A=100
echo "A - ${A} HEXA - $(printf04x $A)"
}