使用" printf"对于android shell中的十六进制值

时间:2016-11-18 02:24:13

标签: android linux shell mksh toybox

我将我的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中使用Traceback (most recent call last): File "python", line 20, in <module> TypeError: string indices must be integers 。我的shell脚本非常庞大,它的使用非常频繁。所以,我想以某种方式处理这个问题。我有什么选择来处理这个问题?

2 个答案:

答案 0 :(得分:2)

Android中的

printf链接到toybox

from tkinter import *

class Window(Frame):

  def __init__(self, master=None):
    Frame.__init__(self, master)                 
    self.init_window()

  def init_window(self):   
    self.master.title("SAMPLE")
    self.pack(expand=1)

    # create empty `f`    
    self.f = Frame(self)
    self.f.pack(expand=1)

    l = Button(self.f, text="Log in", command=self.login)
    l.grid(row=1)

  def login(self):
    # remove old `f`
    self.f.destroy()

    # create empty `f`    
    self.f = Frame(self)
    self.f.pack(expand=1)

    self.var = StringVar()

    self.L = {}

    l = Label(self.f, text="Enter your code:")
    l.grid(row=1, column=0)

    e = Entry(self.f, textvariable=self.var)
    e.grid(row=1, column=1)

    b = Button(self.f, text="Ok", command=self.fun)
    b.grid(row=1, column=2)

  def fun(self):
    # remove old `f`
    self.f.destroy()

    # create empty `f`    
    self.f = Frame(self)
    self.f.pack(expand=1)

    self.L["Code"] = self.var.get()

    l = Label(self.f, text="Code: " + self.L["Code"])
    l.grid(row=1, column=0)


root = Tk()
root.geometry("700x700")
app = Window(root)
root.mainloop()

所以这个问题最终出现在toybox printf中。

此问题现已修复 - https://github.com/landley/toybox/issues/54

答案 1 :(得分:2)

printf中修复toybox非常棒。

但是如果有人想要打印出转换为 hex 的数字(或几乎任何其他合理的 base 2到{{1}如果他们会如此倾向于)在无根设备上使用旧的36(或者根本没有toybox) - 这是一种使用{{{}的方法1}}内置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}"
}