dateコマンドは1日または2日を返します。別の旗を見る

dateコマンドは1日または2日を返します。別の旗を見る

私はOSXとUbuntuで実行する必要があるbashスクリプトを書いています。この特定の問題がOSの不一致によるものかどうかはわかりません。どちらのシェルも bash にもかかわらず、両方のシェルで日付コマンドが異なる可能性が高くなりますか?みましょう。

OSX bashシェルから2日前の日付を印刷するには、次の手順を実行します。

date -v-2d +"%Y"."%m"."%d"

ただし、この-vフラグはUbuntu bashシェルには影響しません。代わりに、私たちは以下を使います:

date --date="2 days ago" +"%Y"."%m"."%d"

残念ながら、--dateOSX bashシェルはこのフラグを認識しません。

どちらの場合も、機能するフラグを持つコマンドが必要です。何を試すことができるかを知っている人はいますか?

答え1

datebash内蔵されていません。 OSXとLinuxの違いはシステムユーティリティです。 OSXはBSDツールを使用し、LinuxはGNUツールを使用します。それらは似ていますが、同じではありません。

あなたが見つけたように、OSXでは、夏時間を制御するフラグで-dあり、Linuxでは表示時間を設定します。dateOSXでは-v表示日を調整しますが、Linuxではこの-vフラグは無効なオプションです。

ほとんどの場合、BSDとGNUはどちらもPOSIX規格との互換性に取り組んでいます。確認してみるとPOSIX規格dateしかし、この場合は役に立ちません。つまり、日付を調整するための構文はサポートされません。

コードを両方のプラットフォームで実行するには、以下を試してください。

[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

または(bashが必要):

[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

答え2

そしてクッシュ 93(IMHO、これはより良いです。強く打つprintfスクリプトの場合は、次の組み込み機能を使用できます。

printf '%(%Y.%m.%d)T' '2 days ago'

関連情報