Bash 4, udvidelse og sætning til små bogstaver

Jeg ser, at i Bash> 4.0 bruges variabel udvidelse til at gemme en variabel. For eksempel

echo ${variable,,} 

Læsning af mandesiden Jeg kan virkelig ikke forstå hvorfor skallen konverterer strengen til små bogstaver.

Et sekvensudtryk har formen {x..y [.. incr]}, hvor x og y enten er heltal eller enkelttegn, og incr, en valgfri stigning, er et heltal. Når heltal leveres, udvides udtrykket til hvert tal mellem x og y inklusive. Medfølgende heltal kan være forud for 0 for at tvinge hvert udtryk til at have samme bredde. Når enten x eller y begynder med et nul, forsøger skallen at tvinge alle genererede udtryk til at indeholde det samme antal cifre, nul-polstring, hvor det er nødvendigt. Når tegn leveres, udvides udtrykket til hvert tegn leksikografisk mellem x og y inklusive, ved hjælp af standard C-lokalitet. Bemærk, at både x og y skal være af samme type. Når inkrementet leveres, bruges det som forskellen mellem hvert udtryk. Standardinkrementet er 1 o r -1 efter behov.

Hvorfor konverteres variablen til små bogstaver?

Svar

Du læser det forkerte afsnit af dokumentationen; se på udvidelse af shellparameter i stedet.

${parameter^pattern}

${parameter^^pattern}

${parameter,pattern}

${parameter,,pattern}

Denne udvidelse ændrer tilfældet med alfabetiske tegn i parameter. pattern udvides til at producere et mønster ligesom i filnavnudvidelse. Hvert tegn i den udvidede værdi parameter testes mod pattern, og hvis det matcher mønsteret, konverteres dets store og små bogstaver. Mønsteret bør ikke forsøge at matche mere end et tegn. Operatøren ‘^’ konverterer små bogstaver, der matcher mønster til store bogstaver; , operatoren konverterer matchende store bogstaver til små bogstaver. Udvidelserne ‘^^’ og ‘,, konverterer hvert matchet tegn i den udvidede værdi; udvidelserne ^ og , matcher og konverterer kun det første tegn i den udvidede værdi. Hvis pattern udelades, behandles det som et ?, Der matcher alle tegn. Hvis parameter er @ eller *, anvendes sagsændringsoperationen på hver positionsparameter igen, og udvidelsen er den resulterende liste. Hvis parameter er en matrixvariabel, der er tegnet med @ eller *, anvendes sagsændringsoperationen til hvert medlem af arrayet igen, og udvidelsen er den resulterende liste.

Svar

Du citerer delen til “Brace Expansion”, En “Brace-udvidelse” starter ikke med en $.

Du skal udføre denne kommando:

LESS=+/"\{parameter\^pattern\}" man bash 

For at finde den del af “sagsændring”, der starter med en $ (${ ^^ }).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *