Używanie unsetu a ustawienie zmiennej na pustą
Obecnie piszę framework do testowania basha, gdzie w funkcji testowej, oba standardowe testy basha ([[
), jak również predefiniowane dopasowania mogą być użyte. Matcherzy są opakowani do „[[” i oprócz zwrotu kodu powrotu, ustawcie znaczący komunikat mówiący o tym, czego się spodziewano.
Przykład:
string_equals() {
if [[ ! $1 = $2 ]]; then
error_message="Expected '$1' to be '$2'."
return 1
fi
}
Tak więc, gdy używany jest licznik, który kończy się niepowodzeniem, ustawiany jest tylko komunikat o błędzie.
Teraz, w pewnym momencie, sprawdzam, czy testy się powiodły. Jeśli się powiedzie, wydrukuję oczekiwanie na zielono, jeśli nie powiedzie się na czerwono.
Ponadto może istnieć zestaw komunikatów o błędach, więc testuję, czy wiadomość istnieje, wypisuję ją, a następnie odznaczam (ponieważ poniższy test może nie ustawićerror_message
):
if [[ $error_message ]]; then
printf '%s\n' "$error_message"
unset -v error_message
fi
Teraz moje pytanie brzmi, czy lepiej jest odznaczyć zmienną, czy po prostu ustawić ją na „”
error_message=''
Który jest lepszy? Czy to rzeczywiście robi różnicę? A może powinienem mieć dodatkową flagę wskazującą, że wiadomość została ustawiona?