Это правильный синтаксис для вашей задачи
if [ -z "${!var}" ] ; then
echo $var "is not available"
else
echo $var "is available"
fi
Пояснение, этот метод использует косвенное расширение переменной, эта конструкция ${!var}
будет расширяться как значение переменной, имя которой находится в $var
.
Изменена check
функция немного
check () {
for var in "$@"; do
[[ "${!var}" ]] && not= || not="not "
echo "$var is ${not}available"
done
}
И еще один вариант с использованием declare
check () {
for var in "$@"; do
declare -p $var &> /dev/null && not= || not="not "
echo "$var is ${not}available"
done
}
Из declare
help
$ declare --help
declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
Set variable values and attributes.
Declare variables and give them attributes. If no NAMEs are given,
display the attributes and values of all variables.
...
-p display the attributes and value of each NAME
...
На самом деле все вары могут быть проверены одновременно с помощью этого
check () {
declare -p $@ 2>&1 | sed 's/.* \(.*\)=.*/\1 is available/;s/.*declare: \(.*\):.*/\1 is not available/'
}