Chỉ các chuỗi được trích dẫn không phải là đối tượng toàn cầu:
$ echo ".[].aliases[]"
.[].aliases[]
Nhưng các chuỗi không được trích dẫn có thể được bao quanh. Một chuỗi không được trích dẫn có chứa một *
hoặc một ?
(hợp lệ) []
(biểu thức ngoặc) sẽ được sửa đổi bởi danh sách các tệp khớp với nó. Theo cách tương tự như một *
ý chí sẽ chuyển đổi thành tất cả các tệp trong thư mục phù hợp và ?
sẽ khớp các tệp chỉ có một ký tự, một (hợp lệ) []
sẽ khớp các tệp với các ký tự bên trong ngoặc. Dấu chấm là ký tự hợp lệ:
$ echo a[.]b
a[.]b
$ touch "a.b"
$ echo a[.]b
a.b
Để có thể khớp với ]
nó, nó phải là ký tự đầu tiên bên trong ngoặc:
$ touch "a]b"
$ ls a[]]b
a]b
Một biểu thức ngoặc rỗng không có nghĩa (và không được mở rộng):
$ touch ab
$ ls a[]b
ls: cannot access 'a[]b': No such file or directory
Đó là lý do tại sao điều này hoạt động:
$ touch a]c abc afc azc a:c a?c aoc
$ ls a[]bfz:?]c
abc a:c a?c a]c afc azc
Đối với [
ý tưởng là tương tự:
$ touch a[c
$ ls a[[]c
a[c
nhưng nó có thể ở bất kỳ vị trí nào trong biểu thức ngoặc:
$ ls a[]bf[z:?]c
abc a:c a?c a[c a]c afc azc
$ ls a[]bfz:?[]c
abc a:c a?c a[c a]c afc azc
Chuỗi bạn đã đăng .[].foo[]
sẽ khớp với một dấu chấm theo sau là a ]
, a .
, a f
, a o
hoặc a [
. Nó tương tự như:
$ echo a[].foo[]c
a[c a]c afc aoc
Và nó sẽ khớp như sau:
$ touch .] .f .o .[ .a .b .z
$ echo .[].foo[]
.. .[ .] .f .o
Lưu ý rằng mục nhập thư mục ..
không cần phải được tạo vì nó tồn tại bên trong mọi thư mục theo mặc định. Nhưng một dấu chấm đơn giản .
sẽ không được khớp bởi một quả cầu vì nó cần phải được khớp một cách rõ ràng (bằng cách thực sự sử dụng một dấu chấm).
Nhưng điều đó sẽ không khớp ..aliases
vì biểu thức ngoặc sẽ chỉ khớp với một ký tự. Để khớp một vài ký tự, bạn cần sử dụng *
(bất cứ thứ gì):
$ touch ..a ..l ..i ..aliases ..alias ..ali
$ echo .[].aliases[]
.. .[ .] .a
$ echo .[].aliases[]*
.. .[ .] .a ..a ..ali ..alias ..aliases ..i ..l