[ "$1" = "" ]
і [ -z "$1" ]
є рівноцінними в баш та інших сумісних з POSIX оболонках. (Зверніть увагу, що на кожній стороні дужок повинно бути пробіл, якщо немає символів, що не містять слова, наприклад ;
.)
[
- вбудована оболонка, як і будь-яка інша; насправді це також може бути написано test
(єдиною різницею між ними є те, що [
потрібен ]
аргумент як останній). Так що, якщо ви біжите [ "$1" = "" ]
з $1
розширенням до -z
, оператор тесту бачить три аргументи: -z
, =
і порожній рядок. Деякі старі оболонки Борна іноді кидали помилки синтаксичного аналізу, коли операнд виглядав таким чином оператором, навіть якщо в повному виразі не було двозначності. Я не знаю, чи яка-небудь версія насправді мала проблеми з цим виразом, але більш складні вирази можуть їх відкинути. Можливо, також були версії, які мали проблеми з порожніми словами; вони також не підтримали [ -z "$1" ]
б. Поширена оболонка ідіома[ x"$1" = x"" ]
. Це дозволяє уникнути ризику розбору операндів як операторів, оскільки жоден оператор не починається з літери.
У КШ, баш і Zsh, ви можете використовувати синтаксис подвійний кронштейн, [[ -z $1 ]]
. Цей новіший синтаксис (це вже з кінця 1980-х, а не з середини 1970-х) виключає ризик розбору операндів як операторів, використовуючи спеціальну синтаксичну конструкцію, а не звичайну вбудовану. Оператори повинні відображатися буквально, без котирувань у подвійних дужках, і вам не потрібно подвоювати цитати змінних розширень.