Bash 4, rozwijanie i wprowadzanie małych liter

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. Element pattern jest rozwijany w celu utworzenia wzorca, tak jak w przypadku rozwijania nazw plików. Każdy znak w rozwiniętej wartości parameter jest testowany względem pattern, 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śli pattern zostanie pominięte, jest traktowane jak „?”, Który pasuje do każdego znaku. Jeśli parameter to „@” lub „*”, operacja modyfikacji wielkości liter jest stosowana po kolei do każdego parametru pozycyjnego, a wynikiem interpretacji jest wynikowa lista. Jeśli parameter 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 $ (${ ^^ }).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *