@OP,
Glob pettern используется не только для имен файлов?
Нет, шаблон "glob" используется не только для имен файлов. вы также можете использовать его для сравнения строк. В ваших примерах вы можете использовать case / esac для поиска шаблонов строк.
gg=svm-grid-ch
case "$gg" in
*grid* ) echo "found";;
esac
case "$gg" in ????grid*) echo "found";; esac
case "$gg" in s???grid*) echo "found";; esac
В bash, когда использовать шаблон глобуса, а когда использовать регулярное выражение? Благодарность!
Регулярные выражения более универсальны и «удобны», чем «глобальные шаблоны», однако, если вы не выполняете сложные задачи, которые «глобальное / расширенное глобальное выражение» не может обеспечить легко, тогда нет необходимости использовать регулярное выражение. Регулярные выражения не поддерживаются для версии bash <3.2 (как упоминал Деннис), но вы все равно можете использовать расширенную глобализацию (путем настройки extglob). для расширенного подстановки см. здесь и несколько простых примеров здесь .
Обновление для OP: пример поиска файлов, которые начинаются с 2 символов (точки "." Означает 1 символ), за которыми следует "g" с использованием регулярного выражения
например, вывод
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
В приведенном выше примере файлы совпадают, потому что их имена содержат 2 символа, за которыми следует «g». (т.е. ..g).
Эквивалент с подстановкой будет примерно таким: (см. В справочнике значение ?и *)
$ for file in ??g*; do echo $file; done
abg
degree
..g