Как определить, является ли string подстрокой к другой строке

#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