bash проверка на пустую переменную

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

В bash по крайней мере следующая команда проверяет, является ли $ var пустым :

Командный man test — твой друг.

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

печатает yes если переменная установлена. $ вернет 1, когда переменная установлена, иначе вернет пустую строку.

Это вернет true если переменная не установлена или установлена в пустую строку («»).

Вопрос состоит в том, как проверить, является ли переменная пустой строкой, и для этого уже даны лучшие ответы.
Но я попал сюда после того, как прошел период программирования на php, и то, что я искал, было проверкой, похожей на пустую функцию в php, работающую в оболочке bash.
Прочитав ответы, я понял, что не думаю о bash должным образом, но, в любом случае, в тот момент такая функция, как empty в php, была бы очень удобной в моем bash-коде.
Поскольку я думаю, что это может случиться с другими, я решил преобразовать пустую функцию php в bash
Согласно руководству по PHP :
переменная считается пустой, если она не существует или если ее значение является одним из следующих:

  • «» (пустая строка)
  • 0 (0 как целое число)
  • 0.0 (0 как число с плавающей запятой)
  • «0» (0 как строка)
  • пустой массив
  • объявленная переменная, но без значения

Конечно, нулевые и ложные случаи не могут быть преобразованы в bash, поэтому они опущены.

Демо-версия:
следующий фрагмент:

Сказав, что в логике bash проверки на ноль в этой функции могут вызвать побочные проблемы imho, любой, кто использует эту функцию, должен оценить этот риск и, возможно, решит отключить эти проверки, оставив только первую.

235 Tree [2010-06-17 14:00:00]

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

bash shell is-empty

10 ответов

343 Решение Jay [2010-06-17 20:09:00]

В bash, по крайней мере, следующие командные тесты, если $ var пуст:

Команда man test является вашим другом.

который, очевидно, очень надежный и независимый от оболочки.

Кроме того, существует разница между «пустым» и «неустановленным». См. Как определить, не определена ли строка в bash оболочке script?.

28 alexli [2012-08-01 15:39:00]

выводит yes , если переменная установлена. $ вернет 1, когда переменная будет установлена, в противном случае она вернет пустую строку.

вопрос запрашивает , как проверить, является ли переменная пустой строкой, и для нее уже даны лучшие ответы.
Но я приземлился здесь после периода, прошедшего программирование в php, и то, что я действительно искал, было проверкой, как пустая функция в php, работающая в оболочке bash.
Прочитав ответы, я понял, что в bash я не думал должным образом, но так или иначе в этот момент функция, подобная пустой в php, была бы удобной в моем коде bash.
Поскольку я думаю, что это может случиться с другими, я решил преобразовать функцию php empty в bash

Согласно руководству php:
переменная считается пустой, если она не существует или ее значение является одним из следующих:

  • «(пустая строка)
  • 0 (0 как целое число)
  • 0.0 (0 в качестве поплавка)
  • » 0″ (0 в виде строки)
  • пустой массив
  • объявленная переменная, но без значения

Конечно, нулевые и ложные случаи не могут быть преобразованы в bash, поэтому они опущены.

Демо-версия:
следующий фрагмент:

Сказав, что в логике bash проверки на ноль в этой функции могут вызвать побочные проблемы imho, любой, кто использует эту функцию, должен оценить этот риск и, возможно, решит сократить эти проверки, оставив только первый.

Каков наилучший способ определить, является ли переменная в bash пустой («»)?

Я слышал, что мне рекомендуется делать if [ «x$variable» = «x» ]

Это правильный способ? (должно быть что-то более прямолинейное)

12 ответов

Это вернет true, если переменная не установлена или установлена в пустую строку («»).

В Bash, когда вы не занимаетесь переносимостью оболочек, которые его не поддерживают, вы всегда должны использовать синтаксис с двойной скобкой:

Любое из следующего:

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

Этот синтаксис совместим с ksh (по крайней мере, ksh93, во всяком случае). Он не работает в чистых POSIX или старых оболочках Bourne, таких как sh или тире.

См. мой ответ здесь и BashFAQ / 031 для получения дополнительной информации о различиях между двойными и одиночными квадратными скобками.

Вы можете проверить, не изменилась ли переменная (в отличие от пустой строки):

, где «x» произвольно.

Если вы хотите узнать, является ли переменная нулевой, но не отменяется:

Переменная в bash (и любая совместимая с POSIX оболочка) может находиться в одном из трех состояний:

  • снята с охраны
  • установить в пустую строку
  • установить непустую строку

В большинстве случаев вам нужно только знать, установлена ли переменная в непустую строку, но иногда важно различать unset и задавать пустую строку.

Ниже приведены примеры того, как вы можете тестировать различные возможности, и работает в bash или любой совместимой с POSIX оболочке:

Вот то же самое, но в удобной форме таблицы:

Конструкция $ расширяется до пустой строки, если VAR не задано или foo , если VAR установлено на что угодно (включая пустую строку).

Конструкция $ расширяется до значения VAR , если она установлена (включая установленную в пустую строку) и foo , если она не установлена. Это полезно для предоставления пользовательских значений по умолчанию (например, $ говорит использовать red , если для переменной COLOR не установлено что-то).

Причина, по которой [ x»$» = x ] часто рекомендуется для проверки того, является ли переменная либо отключена, либо установлена в пустую строку, потому что некоторые реализации команды [ (также известные как test ) являются ошибками. Если VAR установлено на что-то вроде -n , то некоторые реализации будут делать неправильную вещь при задании [ «$» = «» ] , потому что первый аргумент [ ошибочно интерпретируется как оператор -n , а не строка.

Оцените статью