@OP,
Wird glob pettern nicht nur für Dateinamen verwendet?
Nein, das "Glob" -Muster wird nicht nur für Dateinamen verwendet. Sie können damit auch Zeichenfolgen vergleichen. In Ihren Beispielen können Sie case / esac verwenden, um nach Zeichenfolgenmustern zu suchen.
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
Wann sollte in Bash das Glob-Muster und wann der reguläre Ausdruck verwendet werden? Vielen Dank!
Regex sind vielseitiger und "praktischer" als "Glob-Muster". Wenn Sie jedoch keine komplexen Aufgaben ausführen, die durch "Globbing / Extended Globbing" nicht einfach erledigt werden können, müssen Sie Regex nicht verwenden. Regex wird für die Version von bash <3.2 (wie von Dennis erwähnt) nicht unterstützt, Sie können jedoch weiterhin erweitertes Globbing verwenden (durch Festlegen extglob
). Informationen zum erweiterten Globbing finden Sie hier und einige einfache Beispiele hier .
Update für OP: Beispiel zum Suchen von Dateien, die mit 2 Zeichen beginnen (die Punkte "." Bedeuten 1 Zeichen), gefolgt von "g" mit Regex
zB Ausgabe
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
Oben werden die Dateien abgeglichen, da ihre Namen 2 Zeichen gefolgt von "g" enthalten. (dh ..g
).
Das Äquivalent zu Globbing ist ungefähr so: (Siehe Referenz für die Bedeutung von ?
und *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g