首页 > 解决方案 > 在没有日期功能的bash中将数字日期转换为字母日期

问题描述

我试图在 BASH 中将数字日期转换为字母日期而不使用日期函数(旧 BASH 环境)。

我想做的是每个月都有一个case语句,根据输入TestDate将它设置为一个变量(ConvDate),然后在OutputDate变量中返回它。但是,当我对此进行测试时,它会打印重新排列的日期而不添加字符串:

样品在:

10/25/18

截至目前的样品:

25//18

标签: linuxbash

解决方案


关于您的代码的一些想法:

  • 在 case 命令的分支中,当您需要将该字符串分配给变量时,您正在尝试执行Jan命令。
  • 您需要在 case 命令之前解析日期字符串,因为您显然需要先知道月份数。
  • 大括号不是引号:请注意引用变量的方式(即始终引用它们)——这不会对您造成伤害,除非您实际上从用户那里获得了输入数据。
  • 您在此处将月份编号作为字符串处理。如果随着脚本的进行,您开始将其作为数字处理,请注意它0809无效的八进制数字,bash 会很乐意让您知道:

    $ m=08; echo $(($m+1))
    bash: 08: value too great for base (error token is "08")
    

修改

TestDate=09/25/18
IFS=/ read m d y <<INPUT
$TestDate
INPUT
case $m in
    01) Mon=Jan ;;
    02) Mon=Feb ;;
    03) Mon=Mar ;;
    04) Mon=Apr ;;
    05) Mon=May ;;
    06) Mon=Jun ;;
    07) Mon=Jul ;;
    08) Mon=Aug ;;
    09) Mon=Sep ;;
    10) Mon=Oct ;;
    11) Mon=Nov ;;
    12) Mon=Dec ;;
esac
OutputDate="$d/$Mon/$y"
echo "$OutputDate"

推荐阅读