@OP,
Không phải chỉ dùng cho tên tập tin thôi sao?
Không, mẫu "hình cầu" không chỉ được sử dụng cho tên tệp. bạn cũng sử dụng nó để so sánh các chuỗi. Trong các ví dụ của mình, bạn có thể sử dụng chữ hoa / chữ thường để tìm các mẫu chuỗi.
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
Trong bash, khi nào sử dụng mẫu hình cầu và khi nào sử dụng biểu thức chính quy? Cảm ơn!
Regex linh hoạt và "tiện lợi" hơn "hình cầu", tuy nhiên, trừ khi bạn đang thực hiện các tác vụ phức tạp mà "hình cầu / hình cầu mở rộng" không thể cung cấp dễ dàng, thì không cần sử dụng regex. Regex không được hỗ trợ đối với phiên bản bash <3.2 (như dennis đã đề cập), nhưng bạn vẫn có thể sử dụng chế độ cầu vồng mở rộng (bằng cách cài đặt extglob
). để mở rộng cầu vồng, hãy xem tại đây và một số ví dụ đơn giản tại đây .
Cập nhật cho OP: Ví dụ để tìm tệp bắt đầu bằng 2 ký tự (dấu chấm "." Có nghĩa là 1 ký tự) theo sau là "g" bằng cách sử dụng regex
ví dụ đầu ra
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
Ở trên, các tệp được khớp vì tên của chúng chứa 2 ký tự theo sau là "g". (tức là ..g
).
Tương đương với globbing sẽ là một cái gì đó như thế này: (xem tham chiếu để biết nghĩa của ?
và *
)
$ for file in ??g*; do echo $file; done
abg
degree
..g