linux - 在没有日期功能的bash中将数字日期转换为字母日期
问题描述
我试图在 BASH 中将数字日期转换为字母日期而不使用日期函数(旧 BASH 环境)。
我想做的是每个月都有一个case语句,根据输入TestDate将它设置为一个变量(ConvDate),然后在OutputDate变量中返回它。但是,当我对此进行测试时,它会打印重新排列的日期而不添加字符串:
样品在:
10/25/18
截至目前的样品:
25//18
解决方案
关于您的代码的一些想法:
- 在 case 命令的分支中,当您需要将该字符串分配给变量时,您正在尝试执行
Jan
命令。 - 您需要在 case 命令之前解析日期字符串,因为您显然需要先知道月份数。
- 大括号不是引号:请注意引用变量的方式(即始终引用它们)——这不会对您造成伤害,除非您实际上从用户那里获得了输入数据。
您在此处将月份编号作为字符串处理。如果随着脚本的进行,您开始将其作为数字处理,请注意它
08
是09
无效的八进制数字,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"
推荐阅读
- javascript - 为什么浏览器在需要的文本之前返回 undefined?
- matlab - Matlab 2016b:确定表达式的未分配符号函数
- prometheus - 如何使用 Prometheus 编写简单的 Pulsar 指标查询?
- mongodb - VPC peering下如何从外部连接到MongoDB Atlas?
- telegram-bot - 后台连续访问用户的实时位置
- docker - 如何检查两个容器是否正确链接?
- java - 无法在项目 spring-boot-keycloak 上执行目标 org.apache.maven.plugins:maven-clean-plugin:3.1.0:clean (default-clean)
- playframework - 如何配置 Ebean 集群?
- linux - 在 Linux 中使用 little endian 编译 PowerPC(e5500 系列)
- google-maps - 如何在 Google 地图上显示自定义矢量图块