Это похоже на задание для функция:
test_num() {
n=$1; shift
for arg do
[ "$arg" -eq "$n" ] && return 0
done
} 2>/dev/null
if test_num "$num" 9 75 200; then
echo "do this"
elif test_num "$num" 40 53 63; then
echo "do something for this"
else
echo "for other do this"
fi
В функцию передается просто строка. Если вы запустите func somevar
, будет передана строка somevar
. Если вы запустите func $somevar
, будет передано (слово -разделенное )значение переменной somevar
. Также это не ссылка на переменную, указатель или что-то в этом роде, это просто строки.
Если вы хотите передать имя переменной в функцию, а затем просмотреть значение этой переменной, вам потребуется использовать ссылку на имя (Bash 4.3 или более поздней версии, IIRC )или косвенная ссылка ${!var}
. ${!var}
расширяется до значения переменной, имя которой хранится в var
.
Итак, у вас просто неправильный способ в сценарии, если вы передаете имя переменной в функцию, используйте "${!1}"
, чтобы получить значение переменной, названной в $1
, и просто "$1"
, чтобы получить имя .
. это напечатает variable bar is empty, exiting
и закроет оболочку:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
Передать имя в качестве второго аргумента
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${2} is empty"
exit 1
fi
}
exitIfEmpty "$someKey" someKey