ポータブル フラグを使用します。規格はこちらから入手できます
相対日付を出力するという特定の問題については、おそらく日付よりも perl を使用する方が簡単です:
perl -E 'say scalar localtime(time - 86400)'
(この解決策は 23 時間または 25 時間の日に完全に失敗することに注意してください。しかし、この問題に対処するための多くの perl 解決策が利用可能です。perl faq を参照してください。)
しかし、確かにキースのアイデアのバリエーションを使用して、次のことを行うことができます。
if date -v -1d > /dev/null 2>&1; then
DATE='date -v -1d'
else
DATE='date --date="1 day ago"'
fi
eval "$DATE"
あるいは単に
DATE=$(date -v -1d 2> /dev/null) || DATE=$(date --date="1 day ago")
もう 1 つのアイデアは、使用する関数を定義することです。
if date -v -1d > /dev/null 2>&1; then
date1d() { date -v -1d; }
else
date1d() { date --date='1 day ago'; }
fi