Uwaga: istnieje wiele pytań dotyczących testowania zmiennej pojedynczej powłoki na tej stronie. To pytanie dotyczy testowania skryptu dla dowolnej niezdefiniowanej zmiennej.Jak sprawić, aby bash traktował niezdefiniowane zmienne jako błędy?
Można użyć niezdefiniowanej zmiennej w bashu nie widząc żadnego błędu przy wykonywaniu:
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
Znalazłem to bardzo podatny na błędy. Jeśli chcę zmienić nazwę zmiennej w dużym skrypcie lub usunąć tę zmienną, wszystkie poprzednie nieaktualne odwołania spowodują błędy w skrypcie. Czasami nie jest to oczywiste, aby debugować lub dowiedzieć się, kiedy jest już za późno.
Dlaczego jest to dozwolone? Czy istnieje sposób na oznaczenie niezdefiniowanych zmiennych?
"Dlaczego" wracają do kompatybilności z muszlami z lat 1970-tych. Jeśli zależy Ci na najlepszych praktykach, w przeciwieństwie do historii, sprawdzanie statyczne - jak w przypadku http://shellcheck.net/, które jest również dostępne do pobrania [jako samodzielne narzędzie] (https://github.com/koalaman/shellcheck) - to twój przyjaciel. –
Szczerze mówiąc, błędne interpretowanie niezdefiniowanych zmiennych może przerwać wiele typowych idiomów. '[[$ var]] & {echo" Robi coś z $ var "; } ', na przykład, zerwie z' set -u': W przeciwieństwie do 'set -e' (który powoduje tylko błędy, które nie są sprawdzane lub używane jako conditionals do błędów),' set -u' tworzy * co * odwołanie do niezdefiniowana zmienna i błąd. –
(By the way - nazwy zmiennych all-caps są w przestrzeni zdefiniowanej przez POSIX dla zmiennych środowiskowych mających znaczenie dla powłoki lub systemu operacyjnego, przestrzeń nazw zmiennych zawierających co najmniej jeden mały znak jest zarezerwowana do użycia aplikacji. do wszystkich zmiennych powłoki, w przeciwieństwie do zmiennych środowiskowych, w związku z ustawianiem zmiennej powłoki dzielącej nazwę z zmienną środowiskową zastępującą tę ostatnią). –