 |
Оператор -n требует, чтобы строка была заключена в кавычки внутри квадратных скобок. Как правило, проверка строк, не заключенных в кавычки, оператором ! -z, или просто указание строки без кавычек внутри квадратных скобок (см. Пример 7-6), проходит нормально, однако это небезопасная, с точки зрения отказоустойчивости, практика. Всегда заключайте проверяемую строку в кавычки. [1]
Пример 7-5. Операции сравнения
Пример 7-6. Проверка — является ли строка пустой
Пример 7-7. zmost
построение сложных условий проверки
логическое И (and)
exp1 -a exp2 возвращает true, если оба выражения, и exp1, и exp2 истинны.
логическое ИЛИ (or)
exp1 -o exp2 возвращает true, если хотябы одно из выражений, exp1 или exp2 истинно.
Они похожи на операторы Bash && и ||, употребляемые в двойных квадратных скобках.
Операторы -o и -a употребляются совместно с командой test или внутри одинарных квадратных скобок.
Чтобы увидеть эти операторы в действии, смотрите Пример 8-3 и Пример 25-11.
Как проверить, пуста ли переменная в Bash?
В bash, по крайней мере, следующие командные тесты, если $ var пуст:
Команда man test является вашим другом.
который, очевидно, очень надежный и независимый от оболочки.
Кроме того, существует разница между «пустым» и «неустановленным». См. Как определить, не определена ли строка в bash оболочке script?.
выводит 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 , а не строка.