Widzę, że w Bash> 4.0 rozwijanie zmiennych jest używane do małych liter w zmiennej. Na przykład
echo ${variable,,}
Czytanie strony podręcznika Naprawdę nie rozumiem, dlaczego powłoka konwertuje ciąg na małe litery.
Wyrażenie sekwencji ma postać {x..y [.. incr]}, gdzie x i y są albo liczby całkowite lub pojedyncze znaki, a incr, opcjonalny przyrost, jest liczbą całkowitą. Gdy podawane są liczby całkowite, wyrażenie rozwija się do każdej liczby między x a y włącznie. Podane liczby całkowite mogą być poprzedzone prefiksem „0”, aby wymusić na każdym z nich taka sama szerokość. Gdy x lub y zaczyna się od zera, powłoka próbuje wymusić na wszystkich generowanych terminach taką samą liczbę cyfr, w razie potrzeby uzupełniając je zerami. Gdy podawane są znaki, wyrażenie jest interpretowane leksykograficznie do każdego znaku między x a y, włącznie, przy użyciu domyślnych ustawień regionalnych C. Zwróć uwagę, że zarówno x, jak i y muszą być tego samego typu. Gdy podano przyrost, jest on używany jako różnica między każdym terminem. Domyślny przyrost to 1 o r -1 odpowiednio.
Dlaczego zmienna jest konwertowana na małe litery?
Odpowiedź
Czytasz niewłaściwą sekcję dokumentacji; zamiast tego spójrz na rozwijanie parametrów powłoki .
${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
To rozszerzenie modyfikuje wielkość liter alfabetu w
parameter
. Elementpattern
jest rozwijany w celu utworzenia wzorca, tak jak w przypadku rozwijania nazw plików. Każdy znak w rozwiniętej wartościparameter
jest testowany względempattern
, a jeśli pasuje do wzorca, wielkość liter jest konwertowana. Wzorzec nie powinien próbować dopasować więcej niż jednego znaku. Operator „^” konwertuje małe litery pasujące do wzorca na wielkie; operator „,” konwertuje pasujące wielkie litery na małe. Rozszerzenia „^^” i „,,” konwertują każdy dopasowany znak w rozszerzonej wartości; rozszerzenia „^” i „,” dopasowują i konwertują tylko pierwszy znak rozszerzonej wartości. Jeślipattern
zostanie pominięte, jest traktowane jak „?”, Który pasuje do każdego znaku. Jeśliparameter
to „@” lub „*”, operacja modyfikacji wielkości liter jest stosowana po kolei do każdego parametru pozycyjnego, a wynikiem interpretacji jest wynikowa lista. Jeśliparameter
jest zmienną tablicową z indeksem „@” lub „*”, operacja modyfikacji wielkości liter jest stosowana po kolei do każdego elementu tablicy, a wynikiem interpretacji jest wynikowa lista.
Odpowiedź
Cytujesz część dotyczącą „Rozszerzenia nawiasów klamrowych”, „Rozwijanie nawiasów” nie zaczyna się od $
.
Należy wykonać to polecenie:
LESS=+/"\{parameter\^pattern\}" man bash
Aby znaleźć część „modyfikacji wielkości liter”, która zaczyna się od $
(${ ^^ }
).