Тестирование пустых переменных

#bash #shell #variables

#bash #оболочка #переменные

Вопрос:

У меня в моем скрипте большое количество переменных, и я хочу, чтобы скрипт выдавал ошибку, если какая-либо из переменных пуста.

Я знаю, что могу:

 if [[ -z "$var_1" ]] || [[ -z "$var_2" ]] || ... [[ -z "$var_n" ]]; then
  # failure message
fi
 

Однако я не могу сообщить пользователю, какая переменная была пустой, если я сделаю это таким образом. Существует ли альтернативный подход к вышесказанному, чтобы я мог информировать пользователя о пустой переменной?

Ответ №1:

 #!/bin/sh
foo=(var_1 var_2 var_n)

for bar in ${foo[*]}
do
  if [[ ! ${!bar} ]]
  then
    echo $bar is empty
  fi
done
 

Ответ №2:

Просто используйте ${var:?var is empty or unset} первый раз, когда вы ссылаетесь на переменную. Если пустые строки приемлемы, и вам важно только, установлены ли переменные, сделайте ${var?var is unset} . Использование ? в расширении параметра приводит к завершению работы оболочки, и если переменная (пуста или) не установлена.