我试图在不使用日期函数(传统BASH环境)的情况下,将BASH中的数字日期转换为字母日期。
我想做的是每个月都有一个case语句,根据输入的TestDate将其设置为变量(ConvDate),然后在OutputDate变量中将其返回。但是,当我对此进行测试时,它会在不添加字符串的情况下打印重新排列的日期:
示例:
10/25/18
从现在开始采样:
25//18
答案 0 :(得分:3)
关于您的代码的一些想法:
Jan
命令。您正在此处将月份数字作为字符串处理。如果在脚本执行过程中开始将其作为一个数字来处理,请注意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"
答案 1 :(得分:0)
您快到了。当您说case ${ConvDate} in
时,表示“当${ConvDate}
是...时”。您应该将${ConvDate}
替换为您实际测试的内容(日期字符串的0到1或${TestDate:0:2}
字符),然后在case语句中进行赋值:
ConvDate=Jan