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