@OP,
Glob pettern sadece dosya isimleri için kullanılmıyor mu?
Hayır, "glob" kalıbı yalnızca dosya adları için kullanılmaz. dizeleri karşılaştırmak için de kullanıyorsunuz. Örneklerinizde, dize modellerini aramak için case / esac kullanabilirsiniz.
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'de glob kalıbı ne zaman kullanılır ve normal ifade ne zaman kullanılır? Teşekkürler!
Regex, "glob kalıpları" ndan daha çok yönlü ve "kullanışlıdır", ancak "globbing / extended globbing" in kolayca sağlayamayacağı karmaşık görevleri yapmıyorsanız, normal ifadeyi kullanmaya gerek yoktur. Normal ifade, bash <3.2 sürümü için desteklenmez (dennis'in belirtildiği gibi), ancak yine de genişletilmiş globbing'i (ayarlayarak extglob) kullanabilirsiniz. genişletilmiş Genellemenin için bkz burada ve bazı basit örnekler burada .
OP için güncelleme: 2 karakterle (noktalar "." 1 karakter anlamına gelir) ve ardından normal ifadeyi kullanarak "g" ile başlayan dosyaları bulma örneği
örneğin çıktı
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
Yukarıda, dosyalar, adları 2 karakter ve ardından "g" içerdiği için eşleştirilmiştir. (yani ..g).
(Bakmak: globbing ile eşdeğer böyle bir şey olacak referans ait anlam için ?ve *)
$ for file in ??g*; do echo $file; done
abg
degree
..g