web-dev-qa-db-ja.com

日付ユーティリティでエポック時間を印刷する

読書から 別の答え 次のコマンドを使用して現在の エポック時間 を印刷できることを知っています。

_$ date +'%s'
1491150773
_

date(1) のマニュアルページを読んで(注:実際にはmacOSを使用しています)、使用方法を示す例を見つけました。

_ Finally the command:

 date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

 can be used to parse the output from date and express it in Epoch time.
_

例を読むと、_+_は一重引用符の中に入ることができるようです:

_$ date '+%s'
1491150781
_

現在のエポック時間を正常に出力できたとしても、なぜそれが機能するのか理解できず、いくつか質問があります。

  • _date +'%s'_が現在のエポック時間を出力するのはなぜですか?この例での使用の背後にあるパターンを示すより一般的な例はありますか?
  • _+_を引用符で囲むことができるのはなぜですか?

コマンドを explainshell に入れてみましたが、あまり役に立ちません:

enter image description here

7
mbigras

BSD日付とGNU日付はどちらも次の形式です。

date +FORMAT

with FORMATは、日付を表示するための出力フォーマット文字列です。したがって、dateにフィードするのは、+で始まる単なる文字列です。

文字列をdateに渡す前に、文字列はシェルによって解釈されます。したがって、+%sまたは+'%s'または"+%s"は両方とも同等であり、すべてのPOSIXシェルによってそのまま解釈されます。

+'%s'の唯一の利点は、+を気にすることなく、どの文字列形式が使用されたか、またはコピーして解析することをすばやく検出できることです。

また、+'FORMAT'は、シェル拡張と解釈できる特別な形式を使用するときに役立ちます。 zshの例:

date +'(%s)'

動作します:

date +(%s)

しません。

14
cuonglm