Jak zarządzać rozszerzaniem się pustych lub niezaprzeczalnych zmiennych bash

Jak zarządzać rozszerzaniem się pustych lub niezaprzeczalnych zmiennych bash

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