【问题标题】:operation on variable with date generate error对带有日期的变量进行操作会产生错误
【发布时间】:2020-12-03 05:30:56
【问题描述】:

我怎样才能从变量中减去 30 分钟?

#!/bin/bash

date_30=$(date --date '-30 min')
date_60=$($date_30 --date '-30 min')
    
exit 0

但我明白了

./a.sh: 4: ./a.sh: Thu: not found

【问题讨论】:

  • date --date '-60 min' 有什么问题?
  • @KamilCuk 他可能想要相对于第一次约会的第二次约会。 date --date '-60 min' 将产生一个相对于当前时间戳的日期,女巫可能会在两次分配之间升级到下一秒。

标签: linux bash shell ubuntu unix


【解决方案1】:

date_30=$(date --date '-30 min')

这是将date --date '-30 min' 的输出存储到date_30 变量中,类似于:Thu Aug 13 13:09:04 CEST 2020

date_60=$($date_30 --date '-30 min')

执行$date_30变量的内容并在空格上进行分词(因为它没有封闭的双引号"),因此它尝试使用参数Aug13、@执行Thu 987654331@、CEST2020--date-30 min 肯定没有名为 Aug 的命令,这肯定不是你想要做的。

修复它:

date_60=$(date --date "$date_30 -30 min")

或者使用带有时间戳日期的 Shell 算法:

# Store date 30 as timestamp
date_30=$(date +%s)

# Bash arithmetically subtract 1800 seconds (30 min)
date_60=$((date_30-1800))

# Print first date from timestamp into human readable
date --date "@$date_30"

# Print second date from timestamp into human readable
date --date "@$date_60"

【讨论】:

  • 那么如何解决呢?
  • @user3345547 添加解决方案
猜你喜欢
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
相关资源
最近更新 更多