#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* ]]
сгодилось бы и это.