Ich sehe, dass in Bash> 4.0 die Variablenerweiterung verwendet wird, um eine Variable in Kleinbuchstaben zu schreiben. Zum Beispiel
echo ${variable,,}
Lesen der Manpage Ich verstehe wirklich nicht, warum die Shell konvertiert die Zeichenfolge in Kleinbuchstaben.
Ein Sequenzausdruck hat die Form {x..y [.. incr]}, wobei x und y entweder sind Ganzzahlen oder einzelne Zeichen und incr, ein optionales Inkrement, sind Ganzzahlen. Wenn Ganzzahlen angegeben werden, wird der Ausdruck auf jede Zahl zwischen x und y einschließlich erweitert. Gelieferten Ganzzahlen kann das Präfix 0 vorangestellt werden, um jedem Term das Präfix zu erzwingen Gleiche Breite. Wenn entweder x oder y mit einer Null beginnt, versucht die Shell, alle generierten Terme dazu zu zwingen, die gleiche Anzahl von Ziffern zu enthalten, wobei bei Bedarf eine Null-Auffüllung erforderlich ist. Wenn Zeichen angegeben werden, wird der Ausdruck lexikografisch zwischen x und auf jedes Zeichen erweitert y einschließlich einschließlich unter Verwendung des Standardgebietsschemas C Beachten Sie, dass sowohl x als auch y vom gleichen Typ sein müssen. Wenn das Inkrement angegeben wird, wird es als Differenz zwischen den einzelnen Begriffen verwendet. Das Standardinkrement beträgt 1 o r -1 entsprechend.
Warum wird die Variable in Kleinbuchstaben konvertiert?
Antwort
Sie lesen den falschen Abschnitt der Dokumentation. Schauen Sie sich stattdessen Shell-Parametererweiterung an.
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
Diese Erweiterung ändert den Fall von alphabetischen Zeichen in
parameter
. Daspattern
wird erweitert, um ein Muster wie bei der Dateinamenerweiterung zu erzeugen. Jedes Zeichen im erweiterten Wert vonparameter
wird gegenpattern
getestet, und wenn es mit dem Muster übereinstimmt, wird seine Groß- / Kleinschreibung konvertiert. Das Muster sollte nicht versuchen, mehr als ein Zeichen zu finden. Der Operator „^“ konvertiert Kleinbuchstaben, die dem Muster entsprechen, in Großbuchstaben. Der Operator „,“ konvertiert übereinstimmende Großbuchstaben in Kleinbuchstaben. Die Erweiterungen „^^“ und „,,“ konvertieren jedes übereinstimmende Zeichen in den erweiterten Wert. Die Erweiterungen „^“ und „,“ stimmen überein und konvertieren nur das erste Zeichen im erweiterten Wert. Wennpattern
weggelassen wird, wird es wie ein „?“ Behandelt, das jedem Zeichen entspricht. Wennparameter
„@“ oder „*“ ist, wird die Falländerungsoperation nacheinander auf jeden Positionsparameter angewendet, und die Erweiterung ist die resultierende Liste. Wennparameter
eine Array-Variable ist, die mit @ oder * tiefgestellt ist, wird die Groß- / Kleinschreibung nacheinander auf jedes Mitglied des Arrays angewendet, und die Erweiterung ist die resultierende Liste.
Antwort
Sie zitieren das Teil für „Klammererweiterung“. Eine „Klammererweiterung“ beginnt nicht mit einem $
.
Sie sollten diesen Befehl ausführen:
LESS=+/"\{parameter\^pattern\}" man bash
Um den Teil der „Falländerung“ zu finden, der mit einem $
(${ ^^ }
) beginnt.