web-dev-qa-db-ja.com

bashスクリプトで現在の月の名前を取得する方法

bashスクリプトで現在の月の名前(janやfebなど)を取得するための構文は何ですか?

9
Hiraman Patil

date(1)コマンドを使用できます。

例えば:

date +%b
22
Bigon

strftime(3)マニュアル(_man 3 strftime_)をシステムにインストールすると、dateユーティリティで使用できるすべてのフォーマット文字列またはprintfを使用した%(...)Tフォーマット文字列がリストされます。 dateコマンドのマニュアルには、サポートされているフォーマット文字列も含まれている場合があります。

これらのいずれかを使用するには、たとえば、_%b_( "ロケールの短縮された月名")または_%B_( "ロケールの完全な月名")のように、dateに_+_オプションを使用します。 :

_$ date +%B
December

$ date +%b
Dec

$ date +'%B is abbreviated as "%b"'
December is abbreviated as "Dec"
_

または、printfを使用(_ksh93_またはbash 4.3以降):

_$ printf '%(%B)T\n'
December

$ printf '%(%b)T\n'
Dec

$ printf '%(%B is abbreviated as "%b")T\n'
December is abbreviated as "Dec"
_

bashで小文字の省略された月を取得するには(ロケールで月の小文字の名前が常に提供されない場合):

_$ month=$( date +%b )
$ printf 'It is %s\n' "${month,,}"
It is dec
_

パラメータの拡張_${parameter,,pattern}_は、patternが一致する場合は常に_$parameter_の大文字と小文字を変更します。 _${m,,}_では、パターンはどこにでも一致するため、_$m_の文字列全体が小文字になります。

または、kshのように、次のように変数を小文字として事前に宣言します。

_typeset -l month
_

bashprintfでは、_-v_を使用して、生成された文字列をスカラー変数に自動的に挿入できます¹:

_$ printf -v month '%(%b)T'
$ printf 'It is %s\n' "${month,,}"
It is dec
_

¹または配列の要素key _0_または連想配列変数

10
Kusalananda