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 +%BDecember
$ date +%bDec
$ 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üsselelement0 eines Arrays oder einer assoziativen Arrayvariablen
man date
für alle Formatierungsoptionen.Antworten:
Sie können den
date(1)
Befehl verwenden.Zum Beispiel:
quelle
currentmonthname=$(LANG=en_us_88591; date "+%B");
, um den englischen Monatsnamen abzurufencurrentmonthname=$(LC_ALL=C date +%B)
. Ihr Ansatz würde nur funktionieren, wenn er$LANG
sich bereits in der Umgebung befindet undLC_ALL
nicht festgelegt wurde und entwederen_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 demdate
Dienstprogramm verwendet werden können, oder die%(...)T
Formatierungszeichenfolgen mitprintf
. Das Handbuch desdate
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ürdate
:Oder mit
printf
(inksh93
oderbash
4.3+):So erhalten Sie einen abgekürzten Monat in Kleinbuchstaben
bash
(wenn Ihr Gebietsschema nicht immer Kleinbuchstaben für Monate enthält):Die Parametererweiterung
${parameter,,pattern}
ändert den Fall,$parameter
wo immerpattern
Ü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:Mit
bash
'sprintf
können Sie die generierte Zeichenfolge automatisch in eine skalare Variable¹ einfügen, indem Sie-v
:¹ oder das Schlüsselelement
0
eines Arrays oder einer assoziativen Arrayvariablenquelle