Я хотів би переконатися, що в певний момент сценарію після source
файлу конфігурації встановлюється кілька змінних і, якщо їх немає, припинити виконання, повідомивши користувачеві про відсутню змінну. я намагався
for var in $one $two $three ; do
...
але якщо, наприклад $two
, не встановлено, цикл ніколи не виконується $two
. Наступне, що я спробував - це
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
Але якщо два не встановлено, я все одно отримаю "два встановлено", а не "два не встановлено".
Як я можу переконатися, що встановлені всі необхідні змінні?
Оновлення / рішення: Я знаю, що існує різниця між "встановити" і "встановити, але порожньо". Зараз я використовую (завдяки /programming//a/16753536/3456281 та відповіді на це запитання) наступне:
if [ -n "${!var:-}" ] ; then
тож якщо var
він встановлений, але порожній, він все ще вважається недійсним.
set -u
до початку свого скрипту, щоб негайно його припинити, коли використовується змінена змінна.