Назад | Перейти на главную страницу

Как я могу узнать, какая версия оболочки (bash и / или ksh) начинает поддерживать ==

оба [[строка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 где я случайно нашел в свободном доступе короткую ссылку на некоторые из этих логических операндов Вот :)