Дополнительно
Как сравнить две строковые переменные в операторе 'if' в Bash?
Я пытаюсь заставить оператор if
работать в Bash (использую Ubuntu):
#!/bin/bash
s1="hi"
s2="hi"
if ["$s1" == "$s2"]
then
echo match
fi
Я'пробовал различные формы оператора if
, используя [["$s1" == "$s2"]]
, с кавычками и без, используя =
, ==
и -eq
, но я все еще получаю следующую ошибку:
[hi: command not found
Я просмотрел различные сайты и учебники и скопировал их, но это не работает - что я делаю не так?
В конце концов, я хочу сказать, содержит ли $s1
$s2
, так как я могу это сделать?
Я только что разобрался с пробелами... :/ Как мне сказать contains?
Я пробовал
if [[ "$s1" == "*$s2*" ]]
но это не сработало.
568
12
Для сравнения строк используйте:
Для " А "содержится " б", используйте:
(и убедитесь, чтобы добавить пробелы между символами):
плохо:
хорошо:
Вам нужны пространства:
Вы должны быть осторожны, чтобы оставить пространство между знаком '[' и двойные кавычки, в которых переменная содержится это:
В
^
ы показать пробелы нужно оставить.Я предлагаю этот:
Обратите внимание на пробел между открытие/закрытие скобки и переменные, а также пробелы оборачивать '=' знак.
Также, будьте внимательны из вашего заголовка скрипта. Это's не то же самое, используете ли вы
или
Здесь's в источнике.
Я бы предложил:
Без двойных кавычек и только с одним равенством.
Bash4+ примеры. Примечание: не используете кавычки, то будут возникать проблемы, когда слова содержат пробелы и т. д.. всегда привожу в bash ИМО.
Вот некоторые примеры BASH4+ :
Пример 1, чек на 'Да' в строки (без учета регистра):
Пример 2, Проверьте 'Да' в строки (без учета регистра):
Пример 3, чек на 'Да' в строке (с учетом регистра) :
Пример 4, чек на 'Да' в строке (с учетом регистра):
Пример 5, точное совпадение (с учетом регистра):
Пример 6, точное совпадение (без учета регистра):
Пример 7, точное соответствие :
Этот вопрос уже большие ответы, но тут оказывается, что есть небольшая путаница между использованием единого равного и двойного равенства в
Основное различие лежит в какой скриптовый язык ты используешь. Если вы используете Баш затем включить
#!/бин/баш в начале скрипта и сохранить скрипт в файл.Баш
. Для выполнения используйтеБаш именем.Баш
- то вам придется использовать==
.Если вы используете ш а затем использовать
#!/Бен/ш
и сохранить скрипт как filename.sh. Для выполнения используйте
ш filename.sh- тогда вы должны использовать один
=`. Не смешивая их.У меня сейчас нет доступа к linux box, но [ - это программа (и встроенный модуль bash), поэтому я думаю, что вы должны поставить пробел между [ и первым параметром.
Также обратите внимание, что оператор равенства строк, похоже, представляет собой один =
Это больше вопросов, чем ответов ! Да , Подсказка в сообщении об ошибке:
который показывает вам, что вашу "Привет" и были объединены в "[" по.
В отличие от более традиционных языков программирования, в bash, то "[" это команда, как и еще более очевидно, что "ЛС" и т. д. - это'ы не обрабатываются только потому, что это'символ, отсюда и"[" и (замещенных) " и$С1", у которых сразу рядом друг с другом в вашем вопросе соединяются (как правильно на баше) и он пытается найти команду в таком положении: [привет - неизвестный Баш.
На Си и некоторых других языках, в "[" и будет рассматриваться как другой "классовый характер" и будет вывихнуть из следующих и"привет и".
Значит вам нужен пробел после открывающей и"[" по.
Для версии с чисто bash и без "тест", но очень некрасиво, попробуйте:
Объяснение: в
( )
дополнительный подуровень открыт. Он выходит с 0, если там был матч, и он пытается выйти С $С1, если нет матча, который вызывает ошибку (некрасиво). Эта ошибка направлена на/dev/нуль
.Добавив дополнительные строки внутри делает его более безопасным.
Вы также можете использовать другие нотации для одной команды строки: