use*_*428 4 command-line bash date
如果我自己运行命令,它似乎工作正常。例如使用:
date --date='TZ="PST" Sun Jan 01 05:00:10 2017'
Run Code Online (Sandbox Code Playgroud)
太平洋标准时间 2016 年 12 月 31 日星期六 21:00:10
但是,我正在尝试使用带有日期/时间列表的输入文件,并且所有引号都有问题,似乎无法使其正常工作。我的输入文件(示例名称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
Run Code Online (Sandbox Code Playgroud)
我遇到问题的命令是:
while read i; do "date --date='TZ="PST" ${i}'"; done < dates.input
Run Code Online (Sandbox Code Playgroud)
这使
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...
Run Code Online (Sandbox Code Playgroud)
有人对如何使这项工作有任何建议吗?
谢谢
例如,让我们为 选择这个值i:
$ i='Sun Jan 01 06:49:33 2017'
Run Code Online (Sandbox Code Playgroud)
现在,让我们在循环中运行命令:
$ "date --date='TZ="PST" ${i}'"
bash: date --date='TZ=PST Sun Jan 01 06:49:33 2017': command not found
Run Code Online (Sandbox Code Playgroud)
如您所见,在命令及其参数周围加上引号会使 shell 感到困惑。试试吧:
$ date --date="TZ=\"PST\" ${i}"
Sat Dec 31 22:49:33 PST 2016
Run Code Online (Sandbox Code Playgroud)
以上成功。
将此命令放入循环后,循环现在可以工作:
$ 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2018 次 |
| 最近记录: |