Тільки рядки, що цитуються , не підлягають глобалізації:
$ echo ".[].aliases[]"
.[].aliases[]
Але рядки, які не котируються, підлягають глобалізації. Рядок без котирування, що містить a *
або a ?
(дійсний) []
(дужка вираз), буде змінено списком файлів, які відповідають йому. Точно так само, як а *
перетворюється на всі файли у відповідній папці, а файл ?
буде відповідати файлам лише одного символу, а (дійсний) []
буде відповідати файлам із символами всередині дужок. Крапка - дійсний символ:
$ echo a[.]b
a[.]b
$ touch "a.b"
$ echo a[.]b
a.b
Щоб мати можливість відповідати, ]
він повинен бути першим символом у дужках:
$ touch "a]b"
$ ls a[]]b
a]b
Вираз порожнього дужки не має сенсу (і не розширюється):
$ touch ab
$ ls a[]b
ls: cannot access 'a[]b': No such file or directory
Ось чому це працює:
$ touch a]c abc afc azc a:c a?c aoc
$ ls a[]bfz:?]c
abc a:c a?c a]c afc azc
Для [
ідеї аналогічна:
$ touch a[c
$ ls a[[]c
a[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
Рядок, який ви розмістили .[].foo[]
, відповідатиме крапці, за якою слідує або a ]
, a .
, a f
, a o
чи a [
. Це схоже на:
$ echo a[].foo[]c
a[c a]c afc aoc
І воно буде відповідати наступним чином:
$ touch .] .f .o .[ .a .b .z
$ echo .[].foo[]
.. .[ .] .f .o
Зауважте, що запис каталогів ..
не потрібно створювати, оскільки він існує за кожним каталогом за замовчуванням. Але просту крапку .
не порівнюватиме глобус, оскільки її потрібно явно зіставити (фактично використовуючи крапку).
Але це не збігатиметься, ..aliases
оскільки вираз дужки буде відповідати лише одному символу. Щоб відповідати декільком символам, потрібно використовувати *
(що-небудь):
$ touch ..a ..l ..i ..aliases ..alias ..ali
$ echo .[].aliases[]
.. .[ .] .a
$ echo .[].aliases[]*
.. .[ .] .a ..a ..ali ..alias ..aliases ..i ..l