Bash 4, utvidelse og puttering til små bokstaver

Jeg ser at i Bash> 4.0 brukes variabel utvidelse til å variere en variabel. For eksempel

echo ${variable,,} 

Når jeg leser man-siden , skjønner jeg ikke hvorfor skallet konverterer strengen til små bokstaver.

Et sekvensuttrykk har formen {x..y [.. incr]}, hvor x og y er enten heltall eller enkelttegn, og inkr, et valgfritt trinn, er et heltall. Når heltall blir gitt utvides uttrykket til hvert tall mellom x og y, inkludert. Medfølgende heltal kan være prefikset med 0 for å tvinge hvert ord til å ha samme bredde. Når enten x eller y begynner med null, forsøker skallet å tvinge alle genererte termer til å inneholde det samme antallet sifre, nullstille når det er nødvendig. Når tegn leveres, utvides uttrykket til hvert tegn leksikografisk mellom x og y, inkludert, ved bruk av standard C-lokalitet. Vær oppmerksom på at både x og y må være av samme type. Når inkrementet leveres, brukes det som forskjellen mellom hvert begrep. Standardinkrementet er 1 o r -1 etter behov.

Hvorfor konverteres variabelen til små bokstaver?

Svar

Du leser feil del av dokumentasjonen; se på utvidelse av skallparameter i stedet.

${parameter^pattern}

${parameter^^pattern}

${parameter,pattern}

${parameter,,pattern}

Denne utvidelsen endrer tilfelle alfabetiske tegn i parameter. pattern utvides for å produsere et mønster akkurat som i filnavnutvidelse. Hvert tegn i den utvidede verdien til parameter blir testet mot pattern, og hvis det samsvarer med mønsteret, blir dets bokstav konvertert. Mønsteret skal ikke forsøke å matche mer enn ett tegn. Operatøren ‘^’ konverterer små bokstaver som matcher mønster til store bokstaver; , operatøren konverterer samsvarende store bokstaver til små bokstaver. Utvidelsene ‘^^’ og ‘,,’ konverterer hvert samsvarende tegn i den utvidede verdien; ^ og , utvidelsene samsvarer med og konverterer bare det første tegnet i den utvidede verdien. Hvis pattern utelates, blir det behandlet som et ‘?’, Som samsvarer med alle tegn. Hvis parameter er ‘@’ eller ‘*’, blir saksendringsoperasjonen brukt på hver posisjonsparameter i sin tur, og utvidelsen er den resulterende listen. Hvis parameter er en arrayvariabel som er tegnet med @ eller *, blir saksendringsoperasjonen brukt på hvert medlem av arrayet i sin tur, og utvidelsen er den resulterende listen.

Svar

Du siterer delen for «Brace Expansion», En «Brace-utvidelse» starter ikke med en $.

Du bør utføre denne kommandoen:

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

For å finne den delen av «saksendring» som starter med en $ (${ ^^ }).

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *