
私のスクリプトでは、次のコードは2016-04-28T15:47:48形式で$ nのタイムスタンプ変数を正常に生成します。
for n in $(perl parsetime.pl | sed "s/.....$//")
do
echo $n
結果:
2016-04-28T15:47:48
しかし、今この変数を使って15分前の時間を計算したいと思います。他の人は正しい形式(アクション)でタイムスタンプを生成する構文を提供しました。これは次のように達成されます。
/opt/bin/date --date '-15 minutes 2016-04-28T15:39:27' "+%Y-%m-%dT%H:%I:%S"
結果:
2016-04-28T09:09:27
しかし、私の問題は、実際のタイムスタンプを作成する代わりに$ n変数を使用しようとするとエラーメッセージが表示されることです。
for n in $(perl parsetime.pl | sed "s/.....$//")
do
/opt/bin/date --date '-15 minutes "$n"' "+%Y-%m-%dT%H:%I:%S"
結果:
/opt/bin/date: invalid date `-15 minutes "$n"
私は何が間違っていましたか? $n変数をコードに正しく統合するにはどうすればよいですか?
答え1
それが問題です:
'-15 minutes "$n"'
一重引用符は変数の置換を停止するため、実際には"$n"
変数の内容の代わりに渡されます。
書く:
/opt/bin/date --date "-15 minutes $n" '+%Y-%m-%dT%H:%I:%S'
代わりに。