Bash 4, expansion och sättning till gemener

Jag ser att i Bash> 4.0 används variabel expansion för att gemena en variabel. Till exempel

echo ${variable,,} 

Läser man-sidan Jag förstår verkligen inte varför skalet konverterar strängen till gemener.

Ett sekvensuttryck har formen {x..y [.. incr]}, där x och y är antingen heltal eller enstaka tecken, och incr, ett valfritt steg, är ett heltal. När heltal tillhandahålls expanderas uttrycket till varje tal mellan x och y inklusive. Medföljande heltal kan vara prefix med 0 för att tvinga varje term att ha samma bredd. När antingen x eller y börjar med noll, försöker skalet att tvinga alla genererade termer att innehålla samma antal siffror, nollpolstring vid behov. När tecken tillhandahålls utvidgas uttrycket till varje tecken lexikografiskt mellan x och y, inklusive, med standard C-plats. Observera att både x och y måste vara av samma typ. När inkrementet tillhandahålls används det som skillnaden mellan varje term. Standardinkrementet är 1 o r -1 efter behov.

Varför omvandlas variabeln till gemener?

Svar

Du läser fel avsnitt i dokumentationen. titta på skalparameterutvidgning istället.

${parameter^pattern}

${parameter^^pattern}

${parameter,pattern}

${parameter,,pattern}

Denna expansion ändrar fallet med alfabetiska tecken i parameter. pattern expanderas för att producera ett mönster precis som vid filnamnsexpansion. Varje tecken i det utökade värdet parameter testas mot pattern, och om det matchar mönstret konverteras dess fall. Mönstret bör inte försöka matcha mer än ett tecken. Operatören ‘^’ konverterar små bokstäver som matchar mönster till versaler; operatören ‘, konverterar matchande versaler till gemener. Expansionerna ‘^^’ och ‘,, konverterar varje matchat tecken i det utökade värdet; ^ och , utvidgningarna matchar och konverterar bara det första tecknet i det utökade värdet. Om pattern utelämnas behandlas det som ett ?, Som matchar varje tecken. Om parameter är @ eller * tillämpas falländringsåtgärden på varje positionsparameter i sin tur och expansionen är den resulterande listan. Om parameter är en matrisvariabel som är prenumererad med @ eller *, tillämpas falländringsåtgärden på varje medlem i matrisen i tur och ordning och expansionen är den resulterande listan.

Svar

Du citerar delen för ”Brace Expansion”, En ”Brace-expansion” börjar inte med en $.

Du bör utföra detta kommando:

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

För att hitta den del av ”falländring” som börjar med en $ (${ ^^ }).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *