日期命令linux中的日期错误无效

时间:2014-07-04 12:04:26

标签: linux shell date

在脚本中我使用命令

CURRENT_DATE_tmp=`date -d $CURRENT_DATE +%Y%m%d`.

错误date: invalid date `+%Y%m%d' 可能是什么原因。我知道变量CURRENT_DATE在其中有值。

3 个答案:

答案 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;错误或我今天得到了。