将日期/时间列表从 GMT 转换为 PST

将日期/时间列表从 GMT 转换为 PST

如果我单独运行该命令,它似乎运行良好。例如使用:

date --date='TZ="PST" Sun Jan 01 05:00:10 2017'

2016 年 12 月 31 日星期六 21:00:10 PST

但是,我尝试使用包含日期/时间列表的输入文件,但所有引号都存在问题,似乎无法正常工作。我的输入文件(示例名称 dates.input 如下所示:

$ cat dates.input 
Sun Jan 01 06:49:33 2017
Sun Jan 01 05:44:17 2017
Sun Jan 01 05:43:23 2017
Sun Jan 01 05:39:13 2017
Sun Jan 01 05:00:10 2017

我遇到问题的命令是:

while read i; do "date --date='TZ="PST" ${i}'"; done < dates.input

这使

bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:44:17 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:43:23 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:39:13 2017': command not found...
bash: date --date='TZ=PST Sun Jan 01 05:00:10 2017': command not found...

有人对如何实现这个功能有什么建议吗?

谢谢

答案1

作为示例,让我们选择此值i

$ i='Sun Jan 01 06:49:33 2017'

现在,让我们在循环中运行命令:

$ "date --date='TZ="PST" ${i}'"
bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found

可以看出,在命令及其参数两边加上引号会使 shell 产生混淆。请尝试:

$ date --date="TZ=\"PST\" ${i}"
Sat Dec 31 22:49:33 PST 2016

以上操作成功。

将此命令放入循环中后,循环现在可以工作:

$ while read i; do date --date="TZ=\"PST\" ${i}"; done < dates.input
Sat Dec 31 22:49:33 PST 2016
Sat Dec 31 21:44:17 PST 2016
Sat Dec 31 21:43:23 PST 2016
Sat Dec 31 21:39:13 PST 2016
Sat Dec 31 21:00:10 PST 2016

相关内容