Chciałbym się upewnić, że w pewnym momencie skryptu, po sourcewczytaniu pliku konfiguracyjnego, ustawionych jest kilka zmiennych, a jeśli tak nie jest, zatrzymanie wykonywania, informowanie użytkownika o brakującej zmiennej. próbowałem
for var in $one $two $three ; do
...
ale jeśli na przykład $twonie jest ustawiony, pętla nigdy nie zostanie wykonana $two. Następną rzeczą, jakiej próbowałem, było
for var in one two three ; do
if [ -n ${!var} ] ; then
echo "$var is set to ${!var}"
else
echo "$var is not set"
fi
done
Ale jeśli dwa nie są ustawione, nadal otrzymuję „dwa są ustawione na” zamiast „dwa nie są ustawione”.
Jak mogę się upewnić, że wszystkie wymagane zmienne są ustawione?
Aktualizacja / rozwiązanie: Wiem, że istnieje różnica między „zestawem” a „zestawem, ale pustym”. Teraz używam (dzięki /programming//a/16753536/3456281 i odpowiedzi na to pytanie):
if [ -n "${!var:-}" ] ; then
więc jeśli varjest ustawione, ale puste, nadal jest uważane za nieprawidłowe.
set -una początku skryptu, aby zakończyć go natychmiast po użyciu zmiennej nieustalonej.