変数にどの文字が含まれているかを確認し、数値と比較するには? [閉鎖]

変数にどの文字が含まれているかを確認し、数値と比較するには? [閉鎖]

1から9までの後続時間が数字で記録され、その後のアルファ文字で記録される時間記録があります。時間を通常の形式で保存したいので、アルファベット文字を次の数字に変換する必要があります。

ファイル名から時、分、秒を削除しました。

 endOfFile=${files: -9}
 currentTime=${endOfFile%.*}
 firstLetter=$(printf %.1s "$currentTime")
 echo "$firstLetter"

     

出力:

 1

3

5

7

9

B

D

F

H

J

変数に数字や文字が含まれているかどうかを確認し、その場合は適切な数字に置き換えることができますか?

ベストアンサー1

コメントの私の提案によると:ASCIIコードから:

  • 最初の文字のASCIIコードを取得します。 (ord_fl=$(printf %d "'$firstletter")
    ところで、前の一重引用符は意図的なものです。)
  • 55減算:hour=$(($ord_fl-55))
    大文字のASCIIコードは65(10進数)から始まり、アルファベット順に増加するため、Aの希望の出力は10にする必要があります。

コメントでは、Stéphaneが提案した他のより良いアイデアは次のとおりです。24進数を10進数に変換する:

hour=$(( 24#$firstletter ))

注:正確な構文はシェルによって異なる場合があります。
シェルがこれらの拡張を実装していない場合は、いつでもbc次の出力を使用して取得できます。

echo "ibase=24; $firstletter" | bc

おすすめ記事