如何检查变量包含哪些字符并将其与数字进行比较?

如何检查变量包含哪些字符并将其与数字进行比较?

我有一个小时记录,其中后续时间从 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(十进制)开始,A 的所需输出应为 10。

Stéphane 在评论中提出的其他可能更好的想法:从 24 进制到十进制的进制转换:

hour=$(( 24#$firstletter ))

注意:确切的语法可能取决于您的 shell。
如果您的 shell 没有实现此类扩展,您始终可以求助于bc并获取以下输出:

echo "ibase=24; $firstletter" | bc

相关内容