оба [[строка1 == строка2]] и [[строка1 = строка2]] означают одинаковые. Но какой-то другой парень сказал мне, что их машина не поддерживает ==. Сообщение об ошибке: синтаксическая ошибка: `== 'неожиданно.
Кажется, они используют довольно старый UNIX с оболочкой korn, а я использую REHL5.2. Поскольку я не могу получить доступ к их машинам, как мне узнать, какая версия начинает поддерживать "=="?
Спасибо
Вы можете посмотреть на стоимость $SHELL
и посмотрите, установлен ли он на исполняемый файл оболочки. Затем вы можете проверить его ценность или ее отсутствие; Я не знаю, будет ли это установлено на старых оболочках.
Если вам не нужны расширенные функции [[
тогда используйте [
вместо. Эта веб-страница подробно объясняет различия. Также взгляните на этот связанный вопрос.
Если вы собираетесь сравнивать только строки с ==
затем используйте синтаксис POSIX для максимальной совместимости: [ string1 = string2 ]
в котором используется единственный знак равенства.
Если пользователь на самом деле использует оболочку KSH / Korn, проблема может быть не в ==
, но вместо двойных кавычек, так как многие стандарты AT&T теперь принимают ==
согласно --posix
или -o posix
установлены флаги. (Эти два флага заставляют KSH использовать стандарты posix)
Короче говоря, вы должны использовать: if [ "$instance" = "ALL" ]; then
Двойные кавычки защищают от случаев null
или иным образом empty
строки, которые, скорее всего, вызовут ошибку, даже если синтаксис был правильным.
Бонус: Дело не в том, что KSH не поддерживает ==
дело в том, что KSH не поддерживает null
и empty
объекты / возвраты.
Для получения дополнительной информации вы можете проверить главная страница КШ, или книгу Питера Зеебаха о Сценарии Portable Shell или даже Поваренная книга O'Reilly Bash, и, наконец, Книга О'Рейли Korn Shell где я случайно нашел в свободном доступе короткую ссылку на некоторые из этих логических операндов Вот :)