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ärdetparameter
testas motpattern
, 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. Ompattern
utelämnas behandlas det som ett ?, Som matchar varje tecken. Omparameter
är @ eller * tillämpas falländringsåtgärden på varje positionsparameter i sin tur och expansionen är den resulterande listan. Omparameter
ä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 $
(${ ^^ }
).