$str == *»somestring»* против использования регулярных выражений

#bash

Вопрос:

В настоящее время у меня работает приведенный ниже сценарий bash. Однако я не уверен, что этот подход полностью хорош. Я пытаюсь найти подстроку test в приведенных ниже путях к каталогам. Какая была бы лучшая оценка? регулярное выражение? Ищете некоторые рекомендации, используя приведенный ниже пример

 for str in "/directory/manifest" "directory/test/configs" "directory/test/secrets" "directory/main" "directory/bin"; do
    if [[ $str == *"test"* ]];then
        echo $str
    fi
done
 

Комментарии:

1. Почему вы хотите зацепиться test за эти струны? Вы составляете список каталогов, но хотите исключить деревья каталогов в разделе test ? Возможно, существует более надежное решение с find помощью .

2. Оператор сопоставления =~ -лучший вариант. На мой взгляд, это легче читать: [[ $str =~ test ]]

3. Другим вариантом было shopt -s globstar бы , а затем for str in **/*test*; do something with $str; done , если вы ищете каждый файл и каталог, которые соответствуют *test* .

4. Помимо метода сравнения, вам, возможно, потребуется позаботиться о том, чтобы имя пути не содержало чего-то подобного latest .

5. @MaryCoding : Если выражение glob делает то, что вы хотите, почему вы ищете альтернативу регулярному выражению? Использование регулярного выражения немного легче читать, как указывал Аккдиас, но, в конце концов, это зависит от того, какой стиль вам больше нравится. Кстати, в вашем примере нет причин использовать кавычки вокруг строкового теста . [[ $str == *test* ]] сгодилось бы и это.