私は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"
残念ながら、--date
OSX bashシェルはこのフラグを認識しません。
どちらの場合も、機能するフラグを持つコマンドが必要です。何を試すことができるかを知っている人はいますか?
答え1
date
bash
内蔵されていません。 OSXとLinuxの違いはシステムユーティリティです。 OSXはBSDツールを使用し、LinuxはGNUツールを使用します。それらは似ていますが、同じではありません。
あなたが見つけたように、OSXでは、夏時間を制御するフラグで-d
あり、Linuxでは表示時間を設定します。date
OSXでは-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'