• ベストアンサー

シェルスクリプト(.sh)で、10進数文字を16進数へ変換したい

shスクリプトについて質問です。 10進数の0~15までが入った配列の値を、 10~15だけ、16進数のA~Fに変えたいです。 trコマンドで、"[:digit:]"っていうのがあったのですが、 全く使い方が見当たりませんでした^^; 何か一例いただけないでしょうか^^; 別にtrコマンドでなくても良いので、 どのようにすれば、shスクリプト内でやりたい事が できるか、教えていただけないでしょうかm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
noname#111181
noname#111181
回答No.4

ご質問の主旨を誤解していました。 下記でできます。 ------------------------------------- i=13 i=$(printf "%x" $i) echo $i

darkness22
質問者

補足

--------------------------- #!/bin/sh i=13 i=`printf '%x' $i` echo $i で、実行すると、 --- : command not found : invalid number 4: printf: 13 --- --------------------------- #!/bin/sh i=13 i=$(printf "%x" $i) echo $i で、実行すると、 ----- : command not found : command not found : invalid number 5: printf: 13 0 ----- --------------------------- なんかやっちゃってますかね^^;

その他の回答 (5)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.6

>: command not found >: invalid number 4: printf: 13 改行コードがCRLF(Windows用)になってますね。Windowsで作成したファイルをバイナリモードでftpしたのですか? ファイルはLinux上でゼロから作るか、ftpするならテキストモードで。

darkness22
質問者

お礼

ありがとうございます。 FTPでやってるんですが何故だろう。 一回、Linux上でファイル作ってみます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

> command not found printf って、bashとかで独自に追加した組込みコマンドだから、標準のshだと使えないことがあると思います。 中にはshの実体がbash等になっていて、printfが使えることもありますが。 互換性を考えたら使わない方がいいでしょう。

darkness22
質問者

お礼

printf自体は使えない場合があるのですか。 互換性がないものは確かに微妙ですね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ん~, i=`printf '%x' $i` でいいような気もする.

darkness22
質問者

補足

--------------------------- #!/bin/sh i=13 i=`printf '%x' $i` echo $i で、実行すると、 --- : command not found : invalid number 4: printf: 13 --- --------------------------- #!/bin/sh i=13 i=$(printf "%x" $i) echo $i で、実行すると、 ----- : command not found : command not found : invalid number 5: printf: 13 0 ----- --------------------------- なんかやっちゃってますかね^^;

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

表示しただけでは、変数に入らないのは当り前の話ですね 表示内容を変数に代入しなければなりません 例えば、 i=`echo $i | awk '{printf("%x", $1)}'`

noname#111181
noname#111181
回答No.1

awkを使って下記のようにしてみてはいかがでしょう。 「数字」の部分に10進数値を入れてください。 echo 数字 | awk '{printf("%x\n", $1)}'

darkness22
質問者

お礼

ありがとうございます。 変換は出来たのですが、 i=13 echo $i | awk '{printf("%x\n", $1)}' echo $i としたら、 d 13 と表示されました^^; この$iを、dに書き換える方法はありますでしょうか?

関連するQ&A

専門家に質問してみよう