[英]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
是printf
不建議使用mksh
。 我的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中。
該問題現已修復-https: //github.com/landley/toybox/issues/54
在toybox
修復printf
很棒。
但是,如果有人想在帶有舊toybox
(或完全沒有toybox
)的無根設備上打印出轉換為十六進制的數字(或者,如果他們願意,可以打印幾乎所有其他合理的基數,從2
到36
)-在這里是一種怎樣用做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)"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.