![変数にどの文字が含まれているかを確認し、数値と比較するには? [閉鎖]](https://linux33.com/image/227436/%E5%A4%89%E6%95%B0%E3%81%AB%E3%81%A9%E3%81%AE%E6%96%87%E5%AD%97%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%80%81%E6%95%B0%E5%80%A4%E3%81%A8%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
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