I am porting my shell script (quite big shell script) from bash to android shell (mksh shell).
In Android, printf
does not seem to be working the same way as it works in other Linux systems.
Sample code :
$ cat sample.sh
...
func1()
{
A=100
HEXA=`printf "%04x" ${A}`
echo "A - ${A} HEXA - ${HEXA}"
}
func1
This function's output is as follows.
$ ./sample.sh
A - 100 HEXA - 300000078
It is printing a really weird number.
I saw from other posts and from the manpage of mksh
that printf
is not recommended to be used in mksh
. My shell script, which is quite big, is using it very heavily. So, I want to handle this somehow. What are my options to handle this?
printf in Android is linking to toybox
So the issue turned out to be in toybox printf.
The issue is now fixed - https://github.com/landley/toybox/issues/54
Fixing
printf
intoybox
is great.But in case anyone would like to print out a number converted to hex (or pretty much any other reasonable base from
2
to36
if they would be so inclined) on an unrooted device with the oldtoybox
(or notoybox
at all) - here is a way how to do it usingtypeset
built-in ofmksh
:or just make a specific function for the
printf "%04x"
case: