Wie lautet die Syntax, um den aktuellen Monatsnamen (z. B. Jan oder Februar) in einem bash
Skript abzurufen ?
Wie lautet die Syntax, um den aktuellen Monatsnamen (z. B. Jan oder Februar) in einem bash
Skript abzurufen ?
Antworten:
Sie können den date(1)
Befehl verwenden.
Zum Beispiel:
date +%b
currentmonthname=$(LANG=en_us_88591; date "+%B");
, um den englischen Monatsnamen abzurufen
currentmonthname=$(LC_ALL=C date +%B)
. Ihr Ansatz würde nur funktionieren, wenn er $LANG
sich bereits in der Umgebung befindet und LC_ALL
nicht festgelegt wurde und entweder en_us_88591
ein 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.
Das strftime(3)
Handbuch ( man 3 strftime
) listet, falls auf Ihrem System installiert, alle Formatierungszeichenfolgen auf, die mit dem date
Dienstprogramm verwendet werden können, oder die %(...)T
Formatierungszeichenfolgen mit printf
. Das Handbuch des date
Befehls 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 ksh93
oder 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"
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, $parameter
wo immer pattern
Übereinstimmungen auftreten. In ${m,,}
stimmt das Muster überall überein, sodass die gesamte Zeichenfolge in $m
Kleinbuchstaben geschrieben ist.
Oder ksh
deklarieren Sie die Variable wie in vorher als Kleinbuchstaben mit:
typeset -l month
Mit bash
's printf
kö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
man date
für alle Formatierungsoptionen.