Сравнение null и пустой строки в Bash
Заголовок: Проблема с проверкой переменной в Bash: выводится "Hi", даже если переменная не задана
Текст вопроса:
Я не задаю никаких значений для переменной $pass_tc11
, в результате чего при попытке вывести ее значение получается null. Как можно корректно сравнить переменную в условии if
?
Вот мой код. Я не хочу, чтобы "Hi" выводился...
-bash-3.00$ echo $pass_tc11
-bash-3.00$ if [ "pass_tc11" != "" ]; then
> echo "hi"
> fi
hi
-bash-3.00$
Как я правильно могу проверить, что переменная не задана или пуста, чтобы избежать ненужного вывода?
2 ответ(ов)
Во-первых, обратите внимание, что вы неправильно используете переменную:
if [ "pass_tc11" != "" ]; then
# ^
# пропущен $
Тем не менее, чтобы проверить, пуста переменная или нет, вы можете использовать -z
— для проверки, что строка пуста:
if [ ! -z "$pass_tc11" ]; then
echo "hi, I am not empty"
fi
Или используйте -n
— для проверки, что длина строки ненулевая:
if [ -n "$pass_tc11" ]; then
echo "hi, I am not empty"
fi
Согласно man test
:
-z STRING
длина STRING равна нулю
-n STRING
длина STRING ненулевая
Примеры:
$ [ ! -z "$var" ] && echo "yes"
$
$ var=""
$ [ ! -z "$var" ] && echo "yes"
$
$ var="a"
$ [ ! -z "$var" ] && echo "yes"
yes
$ var="a"
$ [ -n "$var" ] && echo "yes"
yes
В ответ на ваш вопрос, fedorqui предложил рабочее решение, но существует и другой способ выполнить ту же задачу.
Вы можете проверить, установлена ли переменная, с помощью простого условного оператора:
#!/bin/bash
amIEmpty='Hello'
# Это будет истинно, если переменная содержит значение
if [ $amIEmpty ]; then
echo 'Нет, я не пуст!';
fi
Кроме того, если вам нужно проверить, пуста ли переменная, можно использовать следующий код:
#!/bin/bash
amIEmpty=''
# Это будет истинно, если переменная пуста
if [ ! $amIEmpty ]; then
echo 'Да, я пуст!';
fi
Для более подробной информации о конструкции if
в bash вы можете обратиться к хорошей документации на tldp.org:
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
Как выводить команды оболочки по мере их выполнения
Назначение значений по умолчанию для переменных оболочки одной командой в bash
Как указать приватный SSH-ключ для выполнения команды shell в Git?
Как узнать, в какой интерактивной оболочке я нахожусь (командная строка)
Расширение переменных внутри одинарных кавычек в команде Bash