1

シェル スクリプト (非常に大きなシェル スクリプト) を bash から Android シェル (mksh シェル) に移植しています。

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ことがわかりました。私のシェル スクリプトは非常に大きく、非常に頻繁に使用しています。ということで、なんとか対処したいと思います。これを処理するためのオプションは何ですか?printfmksh

4

2 に答える 2

2

固定printftoybox素晴らしいです。

しかし、誰かが古い(またはまったくない)ルート化されていないデバイスで、 16進数に変換された数値(または、必要に応じてからからの他の合理的な基数)を印刷したい場合-ここ方法があります組み込みの ofを使用してそれを行うには:236toyboxtoyboxtypesetmksh

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-19T13:49:39.637 に答える