Могу ли я сделать псевдоним переменной в Bash?

bash

40 просмотра

2 ответа

Я хотел бы проверить существование переменной в bash следующим образом.

if [ -z "$VARIABLE" ]; then
  echo "VARIABLE does not exist"
else
  echo "VARIABLE exist"
fi

Работает нормально. Но на следующем шаге я хотел бы сгенерировать имя переменной и проверить, существует ли переменная с именем переменной или нет, как показано ниже.

function generate_var_name() { echo "aaa" }

VARIABLE_NAME=$(generate_var_name)
if [ -z ${$VARIABLE_NAME:-""} ]; then  # This give error message below.
  echo "VARIABLE does not exist"
else
  echo "VARIABLE exist"
fi

Однако это не сработало. Его сообщения об ошибках были

${"$INCLUD_GUARD_NAME":-""}: bad substitution

Опять же, я хотел бы (1) сгенерировать имя переменной nameA и сохранить ее в другой переменной VarB. (2) используя переменную varB, проверьте, существует переменная с именем A или нет.

Кто-то, у кого есть решение или предложение, пожалуйста, скажите мне это.

Большое спасибо.

Автор: mora Источник Размещён: 08.11.2019 11:02

Ответы (2)


3 плюса

Решение

Похоже, вы хотите косвенное расширение переменной. Кроме того, похоже, что условия поменялись местами в вашем условном.

export aaa=foobar
VARIABLE_NAME=aaa

if [ -n "${!VARIABLE_NAME}" ]; then
  echo "VARIABLE exist"
else
  echo "VARIABLE does not exist"
fi

Обновление : как правильно заметил @chepner, тест, приведенный выше, на самом деле не проверяет, была ли переменная определена, а скорее оценивает, является ли переменная пустой строкой. Эта проверка работает, только если цель состоит в том, чтобы рассмотреть неопределенную переменную и переменную, определенную равной эквиваленту пустой строки. Пожалуйста, смотрите ответ @ chepner для правильной проверки существования переменной.

Автор: merlin2011 Размещён: 20.08.2016 08:30

1 плюс

bash уже есть тест на наличие переменной:

foo=3   # non-empty value
bar=    # empty value
# baz is not set
for v in foo bar baz; do
    if [[ -v $v ]]; then
        echo "$v is set; its value is ${!v}"
    else
        echo "$v is not set"
    fi
done
Автор: chepner Размещён: 20.08.2016 01:56
Вопросы из категории :
32x32