在脚本中我使用命令
CURRENT_DATE_tmp=`date -d $CURRENT_DATE +%Y%m%d`.
错误date: invalid date `+%Y%m%d'
可能是什么原因。我知道变量CURRENT_DATE在其中有值。
答案 0 :(得分:4)
date -d $CURRENT_DATE
将打印与$CURRENT_DATE
变量对应的日期。
$) CURRENT_DATE="20140220"
$) date -d $CURRENT_DATE
Thu Feb 20 00:00:00 IST 2014
要将日期存储到变量中,请尝试使用
$) CURRENT_DATE_TMP=`date +%Y%m%d`
$) echo $CURRENT_DATE_TMP
20140704
修改强>
要将现有日期打印为新格式,请使用
$ CURRENT_DATE=`date +%Y-%m-%d`
$ echo $CURRENT_DATE
2014-07-04
$ date -d$CURRENT_DATE "+%Y%m%d"
20140704
更好的是,将$CURRENT_DATE
变量包装在引号内,以便带空格的日期不会破坏任何内容。
$ CURRENT_DATE=`date`
$ echo $CURRENT_DATE
Fri Jul 4 17:59:45 IST 2014
$ date -d"$CURRENT_DATE" "+%Y%m%d"
20140704
$ date -d$CURRENT_DATE "+%Y%m%d"
date: extra operand ‘4’
在您当前的示例中,-d
标记后面有空格,将其删除。
答案 1 :(得分:1)
这是因为变量未设置或为空,并且您没有引用变量:
$ CURRENT_DATE=""
$ CURRENT_DATE_tmp=$(date -d $CURRENT_DATE +%Y%m%d)
date: invalid date ‘+%Y%m%d’
如果使用引号,则不会出现错误:
$ CURRENT_DATE_tmp=$(date -d "$CURRENT_DATE" +%Y%m%d)
$ echo $CURRENT_DATE_tmp
20140704
答案 2 :(得分:0)
评论中已经提到过这一点,但如果你想做你想做的事情,你必须确保变量$ CURRENT中确实存在一个值。 尝试在脚本中插入这两行:
echo date is =$CURRENT=
date -d "$CURRENT" "+%Y%m%d"
如果其中一行输出显示如下,那么您忽略了设置
$CURRENT
为非空字符串:
date is ==
当date -d "$CURRENT" "+%Y%m%d"
为空字符串时,尝试-d
的各种变体(带或不带引号,$CURRENT
之后有或没有空格),我看到"无效的日期& #34;错误或我今天得到了。