2013-08-19 19 views
10

To nie może być najbardziej prowokujące pytanie, ale mimo to wzbudziło moją ciekawość. Nie byłem w stanie znaleźć żadnej odpowiedzi (nie mówiąc już o ostatecznej) w Internecie.Dlaczego argumenty wiersza polecenia bash po 9 wymagają nawiasów klamrowych?

Podczas czytania Advanced Shell Scripting natknąłem się na this section w odniesieniu do argumentów pozycyjnych linii poleceń, które stwierdzają, że cokolwiek po dziewiątym argumencie musi być otoczone przez $ {} (dłuższa forma zmiennej odwołanie/podstawienie).

Po prostu powód, dla którego należy odwołać się do argumentu wiersza poleceń dziesięć (i poza) jako ${10}, ${11}... zamiast $10, $11, ...?

+11

Historia; oryginalna powłoka Bourne'a interpretowała '$ 12' jako' $ {1} 2' (i nie pozwalała '$ {12}' AFAICR). –

Odpowiedz

6

W szczególności twoje pytanie dotyczy "parametrów pozycyjnych". Używanie $ var zamiast $ {var} jest skrótem w bash. W większości przypadków działa dobrze. Zmienne Bash muszą zaczynać się od litery lub podkreślenia. Wewnętrznie traktuje zmienne zaczynające się od cyfry jako "parametr pozycyjny". Kiedy bash wykrywa parametr pozycyjny, patrzy tylko na pierwszą cyfrę, dlatego 10 $ zwraca 1 $ "0". Przez wywołanie $ {10} instruujesz bash, aby spojrzał na pełną zmienną zamiast jej domyślnej wartości domyślnej pierwszej cyfry.

Dlaczego tak jest? Nie mam pojęcia. Wdrożono starszą implementację, która została rozszerzona o moje przypuszczenia. "Kto kiedykolwiek potrzebuje więcej niż ...?"

Powiązane problemy