2017-04-08 11 views
-2

(Printf "%d \ n" \ 'A)このコードはASCIIを出力していますが、私は関数を使って作業しています。これとともに 。 私を助けてください。bashでprintfなしで文字のASCIIを返す関数を書く方法

+5

printfを使うのか?それはbash bult-inだ。 –

+0

私は上記のコメントをエコーし​​なければなりません: 'printf'は仕事のための正しいツールです。使用できないと思われる問題が発生している場合は、その問題を詳しく説明することで問題解決にお役立てください。 (別の質問では、この質問には既に回答があるので...しかし、あなたがそのような質問をして、そこに私に '@'を付ける、またはここにコメントからリンクしたいなら、喜んで見てください)。 –

+0

'echo A | tr -d "\ n" | od -An -t uC' – dawg

答えて

1

あなたはPOSIXユーティリティod使用することができます。

$ echo A | tr -d "\n" | od -An -t uC 
      65  

またはhexdump

$ echo Z | tr -d "\n" | hexdump -d | head -1 | cut -d " " -f 4 
00090 

それともの可能性があり、私が思うんAzの文字をループ(ここには、エラー訂正...):

ord() { 
    local ordinal=65 
    for c in {A..z}; 
    do 
     if [ "$1" = "$c" ] 
     then 
      break 
     fi  
     let ordinal=ordinal+1 
    done 
    echo "$ordinal" 
} 

$ ord z 
122 

以上の 'Bashy':

ord() { 
    local ordinal=65 
    for c in {A..z}; 
    do 
     [[ "$1" == "$c" ]] && break 
     ((ordinal++)) 
    done 
    echo "$ordinal" 
} 

ボトムライン:のprintfを使用しない理由

$ ord() { LC_CTYPE=C printf '%d\n' "'$1"; } 
ord A 
65 
+1

'[[]]ではなく' [] 'を使っているので、拡張子' == 'ではなくPOSIXに準拠した' = 'を使うべきでしょう。 –

+0

@CharlesDuffy:あなたは人間の糸くずです。 ;-) – dawg

関連する問題