玩转 bash 中的日期:传递变量
Playing with dates in bash: passing variables
我试图用 bash 脚本中的日期进行一些计算,但找不到正确的语法。我从转换为日期的文件中获取一个字符串。然后我想提前一两天拿到日期。查看另一篇 Whosebug 帖子,看起来很容易将天数添加到今天的日期。这就是我现在正在做的事情:
# Extract date string from file
ctldate=`awk 'NR==8 { print }' a-AC-2015-02-10-120000-g3.ctl`
echo $ctldate
12:00Z10feb2015
# Convert string to date
ctldate2=`date +'%d/%m/%Y' -d $ctldate`
echo $ctldate2
10/02/2015
# Try to add a day, should be 11/02
data1=$(date +'%d/%m/%Y' -d "$ctldate" --date='1 day')
echo $data1
12/02/2015
# Also tried
data1=$(date +'%d/%m/%Y' -d "$ctldate2" --date='1 day')
echo $data1
12/02/2015
# And
data1=`date +'%d/%m/%Y' -d $ctldate --date='1 day'`
echo $data1
12/02/2015
看来我没有正确地将 $ctldate var 传递给 command 并且计算的基准日期是今天。
提前致谢
当您传递多个 -d
或 --date
时,date
使用最后一个。所以当你这样做时:
date -d "$ctldate" --date='1 day'
日期将考虑 --date='1 day'
,因为它是最后一个 -d
/--date
参数,并且会很乐意显示明天的日期。
您应该使用:
date -d "$ctldate +1 day"
我试图用 bash 脚本中的日期进行一些计算,但找不到正确的语法。我从转换为日期的文件中获取一个字符串。然后我想提前一两天拿到日期。查看另一篇 Whosebug 帖子,看起来很容易将天数添加到今天的日期。这就是我现在正在做的事情:
# Extract date string from file
ctldate=`awk 'NR==8 { print }' a-AC-2015-02-10-120000-g3.ctl`
echo $ctldate
12:00Z10feb2015
# Convert string to date
ctldate2=`date +'%d/%m/%Y' -d $ctldate`
echo $ctldate2
10/02/2015
# Try to add a day, should be 11/02
data1=$(date +'%d/%m/%Y' -d "$ctldate" --date='1 day')
echo $data1
12/02/2015
# Also tried
data1=$(date +'%d/%m/%Y' -d "$ctldate2" --date='1 day')
echo $data1
12/02/2015
# And
data1=`date +'%d/%m/%Y' -d $ctldate --date='1 day'`
echo $data1
12/02/2015
看来我没有正确地将 $ctldate var 传递给 command 并且计算的基准日期是今天。
提前致谢
当您传递多个 -d
或 --date
时,date
使用最后一个。所以当你这样做时:
date -d "$ctldate" --date='1 day'
日期将考虑 --date='1 day'
,因为它是最后一个 -d
/--date
参数,并且会很乐意显示明天的日期。
您应该使用:
date -d "$ctldate +1 day"