shell 如何在脚本中使用设置的时区在日期命令中调用变量

t30tvxxf  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(159)

我目前的任务是实现一个用于维护窗口的调度工具。
我想把输入的开始日期和结束日期转换成unix时间戳,需要实现从我的时区(欧洲/柏林)到UTC的转换。
我已经得到命令,在指定日期工作。为了测试的目的,我创建了一个小的脚本阅读输入(日期)从一个用户,我想转换的日期保存在该变量被转换,但我努力正确调用变量。
下面是小脚本的代码:

#!/bin/bash

read -p "Datum eingeben: " date

datum=$(date -d 'TZ="UTC" $date' +%s)
echo $datum

我尝试了不同的“报价”,试图正确地传递变量,但它要么被检测为命令,要么被检测为无效的日期。
当前错误消息为:
date:无效日期'TZ=“UTC”$date'
我试过把这段引文改成不同的样式,但都不管用。
试着给它一个给予的日期,这工作非常好。

kq0g1dla

kq0g1dla1#

@Zimon,对评论的所有尊重,总结一下,我相信这会为你做好工作。

详情

  • 虽然它可以工作,但我建议使用用户定义的变量名以避免混淆,例如_datedate命令不同。
  • 由于您使用的是+%s,在date手册页中,它会根据您提供的日期和时间计算秒数“自1970-01-01 00:00:00 UTC以来的秒数”。因此,如果您仍然认为需要提及它,只需将TZ=UTC添加到date命令的左侧-因此它将仅针对该命令进行评估。
#!/bin/bash

read -p "Datum eingeben: " _date

datum=$(TZ='UTC' date -d "$_date" +%s)

echo $datum

奖励

如果你需要在双引号中包含一个参数,而你已经有了外部双引号,那么你可以用一个反斜杠\字符来转义内部双引号,如下所示:
假设您需要date -d "$date somthingElse="$value"" +%s
BASH中的当前语法将是date -d "$date somthingElse=\"$value\"" +%s

相关问题