Úgy látom, hogy a Bash> 4.0-ban a változó kibővítését használják egy változó kisbetűvé. Például
echo ${variable,,}
A kézikönyv olvasása Nem igazán értem, hogy a shell miért konvertálja a karakterláncot kisbetűvé.
A szekvencia kifejezés formátuma {x..y [.. incr]}, ahol x és y vagy egész számok vagy egyes karakterek, és az incr (opcionális növekmény) egész szám. Amikor egész számokat adunk meg, a kifejezés x és y között minden számra kibővül. A megadott egész számok előtagja lehet „0”, hogy az egyes kifejezéseket a azonos szélességű. Ha x vagy y nullával kezdődik, a shell megpróbálja az összes generált kifejezést ugyanannyi számjegyre kényszeríteni, szükség esetén nulla kitöltéssel. Ha karaktereket adunk meg, akkor a kifejezés x és y, beleértve az alapértelmezett C területi beállításokat. Vegye figyelembe, hogy x-nek és y-nek is ugyanannak a típusnak kell lennie. Ha az inkrementumot megadják, akkor azt az egyes kifejezések különbségeként használják. Az alapértelmezett növekmény 1 o r -1 értelemszerűen.
Miért alakul a változó kisbetűvé?
Válasz
A dokumentáció rossz részét olvassa el; inkább nézze meg a shell paraméter kibővítését .
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
Ez a kiterjesztés módosítja a
parameter
alfabetikus karakterek esetét. Apattern
kibővül, és ugyanolyan mintát állít elő, mint a fájlnév kiterjesztésében. Aparameter
kiterjesztett értékének minden karakterét teszteljük apattern
-vel szemben, és ha megfelel a mintának, akkor a kis- és nagybetűket konvertálja. A minta nem próbálhat meg egynél több karaktert egyeztetni. A ’^’ operátor a kisbetűknek megfelelő mintát nagybetűvé alakítja; a ’,’ operátor az egyező nagybetűket kisbetűvé alakítja. A ’^^’ és a ‘,,’ kibővítés a kibővített érték mindegyik egyező karakterét átalakítja; a ’^’ és ’,’ kiterjesztések egyeznek és csak a kibővített érték első karakterét konvertálják. Ha apattern
szót kihagyja, akkor azt úgy kezeljük, mint egy „?” Szót, amely minden karakterhez illeszkedik. Ha aparameter
értéke „@” vagy „*”, akkor az esetmódosítási műveletet sorra alkalmazzák az egyes pozícióparaméterekre, és a kibővítés az eredménylista. Ha aparameter
egy tömb változó, amely @ vagy * betűvel van indexelve, akkor az esetmódosítási műveletet sorban alkalmazzuk a tömb minden tagjára, és a kiterjesztés az eredménylista.
Válasz
A “Brace Expansion” részt idézi, A “zárójel kiterjesztése” nem a $
betűvel kezdődik.
Futtassa a következő parancsot:
LESS=+/"\{parameter\^pattern\}" man bash
Az “esetmódosítás” $
(${ ^^ }
) kezdetű részének megkeresése.