Jak zarządzać rozszerzaniem się pustych lub niezaprzeczalnych zmiennych bash
- 4280
- 210
- Maria Piwowarczyk
Cel
Celem tego samouczka jest nauczenie się, jak modyfikować zachowanie BASH podczas rozszerzania niezależnych lub pustych zmiennych za pomocą dedykowanej składni.
Wymagania
- Nie są wymagane specjalne uprawnienia systemowe, aby śledzić ten samouczek
Wstęp
Zmienne rozszerzenie jest jedną z najczęstszych funkcji używanych w skorupce: gdy zmienna istnieje i jest częścią polecenia, jest „rozszerzona”, więc zastępuje to jego wartość. Rozszerzenie pustych zmiennych jest jedną z tych rzeczy, które, jeśli nie są dobrze zarządzane, może spowodować poważne uszkodzenie systemu: wyobraź sobie takie polecenie:
$ sudo rm -rf "/$ dir"
W takim przypadku, jeśli $ dir
Zmienna jest pusta lub nie ustawiona, jej rozszerzenie nie dałoby żadnej wartości, dlatego faktyczne wykonane polecenie byłoby:
$ sudo rm -rf /
Nasz system byłby skazany. Radzenie sobie lub lepiej zapobieganie takiej sytuacji, że ma to niezbędne znaczenie. W tym samouczku zobaczymy, jak zarządzać rozszerzeniem pustych zmiennych przy użyciu składni specyficznej dla bash.
Użyj wartości domyślnej, jeśli zmienna jest pusta, czy nie jest ustawiona
Pierwszym przypadkiem, w którym bierzemy pod uwagę, jest to, że zmienna Unset lub pusta jest odwoływana do rozszerzenia i chcemy użyć wartości awarii/domyślnej na jego miejscu. Załóżmy, że odwołujemy się do nieistniejących $ kolor
Zmienna jako część następującego polecenia:
$ echo „The Sky Is $ Color”
Rezultatem tego polecenia byłoby:
niebo jest
Zgodnie z oczekiwaniami, ponieważ zmienna nie jest ustawiona, nic nie wynika z jej ekspansji, pozostawiając nam niedokończone zdanie (i niebo bez koloru). Oczywiście nie ma żadnej prawdziwej szkody, ale jak moglibyśmy poinstruować powłokę, aby użyć wartości domyślnej w takiej sprawie?
Istnieje składnia specjalnie zaprojektowana w celu uzyskania tego zachowania i jest to bardzo proste:
$ parametr: -Word
Oto jak to działa:
$ echo „The Sky Is $ Color:-„ Blue ”” Niebo jest niebieskie
Podczas korzystania z tej składni, jeśli parametr
nie istnieje lub jest pusty, rozszerzenie spowoduje wartość słowo
. W takim przypadku zmienna $ kolor
nie został ustawiony, dlatego skorupa używana „niebieska” w wyniku rozszerzenia.
Warto zauważyć, że nawet jeśli rozszerzenie spowodowało wartość określoną jako „domyślna”, z tą składnią po rozszerzeniu, $ kolor
Zmienna nadal będzie niepotrzebna:
$ echo „$ kolor”
Użyj, a także przypisz nową wartość, jeśli zmienna jest pusta, czy nie jest ustawiona
Polecenie powyżej nie zwróciło żadnego wyjścia, ponieważ zmienna w tym momencie nie była ustawiona. Co jeśli chcemy użyć określonej wartości podczas rozszerzania niezależnej lub pustej zmiennej, ale także przypisać tę wartość do zmiennej po rozszerzeniu? Nieco inna składnia pozwól nam osiągnąć to, czego chcemy:
$ parametr: = Word
Zobaczmy przykład, w którym używana jest ta składnia:
$ echo "The Sky jest $ color: =" blue "" Niebo jest niebieskie
Tak jak wcześniej, słowo
był używany w ekspansji parametr
( $ kolor
zmienna) nie została ustawiona. Ponadto, słowo
, („Niebieski” w tym przypadku), został również przypisany jako wartość do wcześniej nieznanej zmiennej. Weryfikacja, że jest to bardzo łatwe:
$ „The Sky Is $ Color” Niebo jest niebieskie
Widzieć? Rozszerzenie $ kolor
Zmienna powoduje teraz „niebieski”.
Użyj alternatywnej wartości, jeśli ustawiona jest zmienna
Nieco inna składnia pozwól nam uzyskać jeszcze inny wynik, tutaj jest:
Parametr:+Word
Jak modyfikuje zachowanie powłoki? Kiedy ta składnia jest używana, jeśli parametr
jest pusty lub nie ustawiony, słowo
będzie nie być używane, dlatego rozszerzenie będzie puste. Jeśli zamiast tego zmienna ma wartość, wynik rozszerzenia będzie słowo
, i wartość parametr
nie zostanie zmienione. Wyjaśnijmy to za pomocą niektórych przykładów:
Pierwszy przypadek. Zmienna $ kolor
nie jest ustawiony, dlatego wynik rozszerzenia będzie niczym:
$ echo „The Sky Is $ Color:+„ Blue ”„ Niebo jest
Drugi przypadek. Zmienna $ kolor
ma wartość: rozszerzenie spowoduje wartość określoną po prawej stronie :+
, Ale wartość $ kolor
Zmienna nie zostanie zmieniona:
# Przypisz wartość do zmiennej „kolor” $ color = "czerwony" Sky jest niebieski # Wartość zmiennej „kolor” nie została zmieniona $ echo „color” czerwony
Kopiuj Wyświetl komunikat o błędzie, jeśli zmienna jest pusta, czy nie jest ustawiona
Ostatni rodzaj składni, którą tutaj zbadamy, to:
$ parametr:?słowo
Podczas korzystania z tej składni, jeśli parametr
nie jest ustawiony ani pusty, skrypt wyjdzie z błędem. Ponadto, słowo
zostanie wysłany do Stderr
(Standardowy błąd). Ze względu na ten przykład rozważ zmienną „koloru” za niepomienność, tak jak wcześniej:
# Podana wiadomość jest wyświetlana do standardowego błędu $ echo „Niebo to $ Color:?„Kolor nie ustawiony” ”Bash: kolor: kolor nie ustawiony
Kopiuj Polecenie wyszło z błędem i Kolor nie jest ustawiony
Wyświetlono wiadomość. W przypadku ustalania zmiennej wynikiem rozszerzenia byłoby jego własną wartość:
$ color = "blue" $ echo "Niebo to $ kolor:?„Kolor nie ustawiony” ”Niebo jest niebieskie
Kopiuj Powiązane samouczki Linux:
- Hung Linux System? Jak uciec do wiersza poleceń i…
- Specjalne zmienne bash z przykładami
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- Linux Pliki konfiguracyjne: Top 30 Najważniejsze
- Bash Scripting: Sprawdź, czy istnieje katalog
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Polecenia Linux: Top 20 najważniejsze polecenia, które musisz…
- Jak zarządzać historią Bash
- Ubuntu 20.04 Przewodnik