日付計算コードに日付変数を入力する正しい構文

日付計算コードに日付変数を入力する正しい構文

私のスクリプトでは、次のコードは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'

代わりに。

おすすめ記事