@ OP
Используется ли glob pettern не только для имен файлов?
Нет, шаблон "glob" используется не только для имен файлов. Вы используете его для сравнения строк. В ваших примерах вы можете использовать case / esac для поиска шаблонов строк.
gg=svm-grid-ch
# looking for the word "grid" in the string $gg
case "$gg" in
*grid* ) echo "found";;
esac
# [[ $gg =~ ^....grid* ]]
case "$gg" in ????grid*) echo "found";; esac
# [[ $gg =~ s...grid* ]]
case "$gg" in s???grid*) echo "found";; esac
В bash, когда использовать шаблон glob и когда использовать регулярное выражение? Спасибо!
Regex более универсален и «удобен», чем «шаблоны глобов», однако, если вы не выполняете сложные задачи, которые «глобализация / расширенное глобирование» не может обеспечить легко, то нет необходимости использовать регулярные выражения.
Regex не поддерживаются для версии bash <3.2 (как упоминалось Денисом), но вы все равно можете использовать расширенную глобализацию (установив <code>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
).
Эквивалент с globbing будет примерно таким: (посмотрите на reference для значений ?
и *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g