So erhalten Sie den aktuellen Monatsnamen im Bash-Skript

9

Wie lautet die Syntax, um den aktuellen Monatsnamen (z. B. Jan oder Februar) in einem bashSkript abzurufen ?

Hiraman Patil
quelle
6
Siehe man datefür alle Formatierungsoptionen.
Airhuff

Antworten:

22

Sie können den date(1)Befehl verwenden.

Zum Beispiel:

date +%b
Groß auf
quelle
Die Ausgabe ist länderspezifisch. Dies gibt beispielsweise "1 月" zurück, wenn Ihr Systemgebietsschema auf Japanisch eingestellt ist. Verwenden Sie diese Option currentmonthname=$(LANG=en_us_88591; date "+%B");, um den englischen Monatsnamen abzurufen
Computingfreak
@computingfreak, das sollte eher sein currentmonthname=$(LC_ALL=C date +%B). Ihr Ansatz würde nur funktionieren, wenn er $LANGsich bereits in der Umgebung befindet und LC_ALLnicht festgelegt wurde und entweder en_us_88591ein auf Ihrem System vorhandenes Gebietsschema mit US-englischen Monatsnamen ist oder (wahrscheinlicher) nicht vorhanden ist. In diesem Fall wird standardmäßig C / POSIX verwendet Gebietsschema, in dem die Monatsnamen auf Englisch sind.
Stéphane Chazelas
10

Das strftime(3)Handbuch ( man 3 strftime) listet, falls auf Ihrem System installiert, alle Formatierungszeichenfolgen auf, die mit dem dateDienstprogramm verwendet werden können, oder die %(...)TFormatierungszeichenfolgen mit printf. Das Handbuch des dateBefehls kann auch die unterstützten Formatierungszeichenfolgen enthalten.

Um einen von ihnen zu verwenden, z. B. %b("der abgekürzte Monatsname des Gebietsschemas") oder %B("den vollständigen Monatsnamen des Gebietsschemas"), verwenden Sie die +Option für date:

$ date +%B
December

$ date +%b
Dec

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

Oder mit printf(in ksh93oder bash4.3+):

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

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

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

So erhalten Sie einen abgekürzten Monat in Kleinbuchstaben bash(wenn Ihr Gebietsschema nicht immer Kleinbuchstaben für Monate enthält):

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

Die Parametererweiterung ${parameter,,pattern}ändert den Fall, $parameterwo immer patternÜbereinstimmungen auftreten. In ${m,,}stimmt das Muster überall überein, sodass die gesamte Zeichenfolge in $mKleinbuchstaben geschrieben ist.

Oder kshdeklarieren Sie die Variable wie in vorher als Kleinbuchstaben mit:

typeset -l month

Mit bash's printfkönnen Sie die generierte Zeichenfolge automatisch in eine skalare Variable¹ einfügen, indem Sie -v:

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

¹ oder das Schlüsselelement 0 eines Arrays oder einer assoziativen Arrayvariablen

Kusalananda
quelle