24

Как проверить, установленна ли переменная в Bash

20

Заголовок: Как узнать, установлена ли переменная в Bash?

Описание проблемы:

Мне нужно проверить, установлен ли параметр в функции Bash. Например, как можно проверить, передан ли первый параметр в функцию? Вот мой код:

function a {
    # как проверить, установлен ли $1?
}

Как мне можно реализовать эту проверку?

4 ответ(ов)

13

Чтобы проверить, что строковая переменная не является пустой или нулевой, т.е. если она задана, используйте:

if [ -n "$1" ]

Это противоположно -z. Я чаще использую -n, чем -z.

Пример использования:

if [ -n "$1" ]; then
  echo "Вы указали первый параметр!"
else
  echo "Первый параметр не указан."
fi
2

Существует множество способов сделать это, и один из них выглядит следующим образом:

if [ -z "$1" ]

Этот код успешно сработает, если переменная $1 является пустой или не задана.

0

Чтобы проверить, что переменная непуста, я использую следующую конструкцию:

if [[ $var ]]; then ...       # `$var` развернется в непустую строку

Противоположная проверка определяет, является ли переменная либо не установленной, либо пустой:

if [[ ! $var ]]; then ...     # `$var` развернется в пустую строку (установлена или нет)

Чтобы проверить, установлена ли переменная (пустая или непустая), я использую следующие команды:

if [[ ${var+x} ]]; then ...   # `var` существует (пустая или непустая)
if [[ ${1+x} ]]; then ...     # Параметр 1 существует (пустой или непустой)

Противоположная проверка определяет, не установлена ли переменная:

if [[ ! ${var+x} ]]; then ... # `var` вообще не установлена
if [[ ! ${1+x} ]]; then ...   # Мы были вызваны без аргументов
0

Если вы хотите проверить, установлен ли аргумент в Bash, рекомендуем использовать более безопасный подход, проверяя количество переданных аргументов. Вот ваш оригинальный код:

if [ "$1" != "" ]; then
  echo \$1 is set
else
  echo \$1 is not set
fi

Тем не менее, обычно предпочтительнее проверять $#, который возвращает количество переданных аргументов. Вот переписанный пример:

if [ $# -gt 0 ]; then
  echo \$1 is set
else
  echo \$1 is not set
fi

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь