日付/時刻のリストを 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

ご覧のとおり、コマンドとその引数を引用符で囲むと、シェルが混乱します。代わりに以下を試してください。

$ 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

関連情報