Печатать имя, если параметр передан функции

Это похоже на задание для функция:

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
5
26.03.2019, 19:42
3 ответа

В функцию передается просто строка. Если вы запустите 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
13
27.01.2020, 20:31
echo "Exiting because \$1 is empty"

должно помочь.

2
27.01.2020, 20:31

Передать имя в качестве второго аргумента

function exitIfEmpty()
{
        if [ -z "$1" ]
        then
        echo "Exiting because ${2} is empty"
        exit 1
        fi
}

exitIfEmpty "$someKey" someKey
3
27.01.2020, 20:31

Теги

Похожие вопросы