Bash:日付がパラメータ化されると、date -dは「無効な日付」を生成します。

Bash:日付がパラメータ化されると、date -dは「無効な日付」を生成します。

私のコードの日付を次のようにパラメータ化するとき:

str_last_log_date="2017-07-24"
last_log_date=$(date -d '${str_last_log_date}' +%s)
threshold_days_ago=$(date -d 'now - 2 days' +%s)
echo "last_log_date ${last_log_date}  thres_days_ago ${threshold_days_ago}"

エラーが発生します。

日付: 無効な日付 '${str_last_log_date}' last_log_date thres_days_ago 1500969455

ただし、日付をパラメータ化せずに直接渡すと、正しい結果が得られます。

last_log_date=$(date -d '2017-07-24' +%s)
threshold_days_ago=$(date -d 'now - 2 days' +%s)
echo "last_log_date ${last_log_date}  thres_days_ago ${threshold_days_ago}"

最後のログ日付 1500854400 thres_days_ago 1500969511

どのようなヒントがありますか?

答え1

一重引用符で囲むと、変数は拡張されません。代わりに二重引用符を使用してください。

date -d "${str_last_log_date}"

答え2

last_log_date=$(date -d '${str_last_log_date}' +%s)

次に更新する必要があります(一重引用符を削除)。

last_log_date=$(date -d ${str_last_log_date} +%s)

関連情報