В Shell есть три вида котировок.
Одинарная кавычка (»«)
Все специальные символы между этими цитатами теряют особый смысл.
так echo '$VALUE'
буквально печать $VALUE
, потому что $ теряет свой особый смысл в одинарные кавычки.
двойные кавычки (»«)
Большинство специальных символов между этими цитатами теряют особый смысл с некоторыми исключениями, как $ среди других.
Назад Цитата (
)
Все, что между обратные кавычки будут рассматриваться как команда и будет выполнена.
Backslash
Любой символ сразу после обратной косой черты теряет свой особый смысл.
так в вашем случае, когда вы говорите \"$value\"
из-за обратной косой черты двойные кавычки потеряет смысл и будет оцениваться как она есть.
например, если у вас есть value=34
, тогда \"$value\"
будет оценивать до "34"
с двойными кавычками. и если значение равно нулю, как в вашем случае, то \"$value\"
будет оценивать ""
, так что это не ноль, а строка с двойными кавычками, и именно поэтому сбой нулевой проверки.
Обратная косая черта? Второй передает двойную кавычку, за которой следуют ничто и двойная кавычка в качестве аргумента для проверки на пустоту, а две двойные кавычки не являются пустой строкой. Первый передает пустую строку; кавычки удаляются, а пустая строка - пустая строка. –
Пожалуйста, добавьте тег, чтобы указать, какую оболочку вы используете. Я догадываюсь, но я не хочу этого делать. –
Экранирование кавычек изменяет их из синтаксиса (предоставление инструкции оболочке о том, как понимать другие данные) в буквальном (сами данные). Поскольку вы передаете сами кавычки в качестве данных, данные, приведенные в качестве аргумента для теста, никогда не могут быть нулевыми. –