Bash 4, Erweiterung und Kleinbuchstaben

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. Das pattern wird erweitert, um ein Muster wie bei der Dateinamenerweiterung zu erzeugen. Jedes Zeichen im erweiterten Wert von parameter wird gegen pattern 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. Wenn pattern weggelassen wird, wird es wie ein „?“ Behandelt, das jedem Zeichen entspricht. Wenn parameter „@“ oder „*“ ist, wird die Falländerungsoperation nacheinander auf jeden Positionsparameter angewendet, und die Erweiterung ist die resultierende Liste. Wenn parameter 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.