केवल उद्धृत तार ग्लोबिंग के अधीन नहीं हैं :
$ echo ".[].aliases[]"
.[].aliases[]
लेकिन गैर-उद्धृत तार ग्लोबिंग के अधीन हैं। एक अनुत्तरित स्ट्रिंग जिसमें *
एक ?
या (वैध) []
(ब्रैकेट अभिव्यक्ति) होती है, जो इसे मेल खाने वाली फ़ाइलों की सूची द्वारा संशोधित की जाएगी। उसी तरह जैसे एक *
मिलान निर्देशिका में सभी फाइलों में बदल जाएगा और ?
केवल एक चरित्र की फाइलों से मेल खाएगा, (एक वैध) []
कोष्ठक के अंदर पात्रों के साथ फाइलों का मिलान करेगा। एक डॉट एक मान्य चरित्र है:
$ 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[]
एक डॉट के बाद एक ]
, एक .
, एक f
, o
या एक से मेल खाएगी [
। यह समान है:
$ 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