web-dev-qa-db-ja.com

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}"

last_log_date 1500854400 thres_days_ago 1500969511

任意のヒント?

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

次のように更新する必要があります(単一引用符を削除します):

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

変数は、単一引用符で囲まれている場合は展開されません。代わりに二重引用符を使用してください:

date -d "${str_last_log_date}"
6
heemayl