Chciałbym się upewnić, że w pewnym momencie skryptu, po source
wczytaniu 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 $two
nie 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 var
jest ustawione, ale puste, nadal jest uważane za nieprawidłowe.
set -u
na początku skryptu, aby zakończyć go natychmiast po użyciu zmiennej nieustalonej.