#string #bash #string-comparison
#строка #bash #сравнение строк
Вопрос:
Я пытаюсь определить, присутствует ли подстрока (имя файла) в большой строке, содержащей много путей к файлам. Это мой код, который просто не работает (выводит «Не содержит»). Я попытался сравнить с =~
различными кавычками. Похоже, ничего из этого не работает. Пожалуйста, вы видите проблему в моем коде?
#!/bin/bash
text="/path/to/some/file1-2-3.json /another/path/to/file4-5-6.json"
my_file="file1-2-3.json"
if [[ *"$my_file"* == "$text" ]]; then
echo "Contain"
else
echo "Does not contain"
fi
Ответ №1:
это работает, если вы инвертируете строки:
$ more script.sh
#!/bin/bash
text="/path/to/some/file1-2-3.json /another/path/to/file4-5-6.json"
my_file="file1-2-3.json"
if [[ "$text" == *"$my_file"* ]]; then
echo "Contain"
else
echo "Does not contain"
fi
$ ./script.sh
Contain
$
форма man bash
:
При использовании операторов == и != строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в разделе Сопоставление с образцом…
Комментарии:
1. Я просто писал свой собственный вопрос, как я только что узнал. Какая неприятная ошибка! 😀 Thx