*
वाइल्डकार्ड वर्ण के लिए वर्णन के बाद से शुरू में आश्चर्यजनक रूप से वाइल्डकार्ड व्यवहार होता है :
नल स्ट्रिंग सहित किसी भी स्ट्रिंग से मेल खाता है।
... जब तक आप महसूस करते हैं कि यह अवधि थोड़ी विशेष है जब यह एक फ़ाइल नाम का पहला चरित्र है। परिचयात्मक पाठ 3.5.8 Filename Expansion
यह कहता है:
जब फ़ाइल नाम विस्तार के लिए एक पैटर्न का उपयोग किया जाता है, तो चरित्र '।' फ़ाइल नाम के प्रारंभ में या तुरंत एक स्लैश का अनुसरण करते हुए स्पष्ट रूप से मिलान किया जाना चाहिए, जब तक कि शेल विकल्प डॉटग्लोब सेट न हो।
वाइल्डकैड्स के साथ उपसर्ग करने का "उपयोग पैटर्न" बैश शेल में अग्रणी डैश के साथ नामों को संभालने के./
लिए उपयोगी है , जैसा कि स्टीलड्राइ ने टिप्पणी की थी। वाइल्डकार्ड / फ़ाइल नाम के विस्तार पर इसका कोई प्रभाव नहीं पड़ता है, लेकिन जब आप उन्हें संदर्भित करते हैं, तो फ़ाइल नाम को हैंडल करना सुरक्षित / आसान बना देता है, यदि वे पात्रों के साथ शुरू करते हैं, तो उन कार्यक्रमों को विकल्पों के रूप में गलत व्याख्या कर सकते हैं। उदाहरण के लिए:
# I want a file named `-n`
$ touch -n
touch: invalid option -- 'n'
Try 'touch --help' for more information.
$ touch -- -n
### ok
$ touch ./-n
### ok
... और अब जब मेरे पास एक फ़ाइल है -n
, अगर मैं वाइल्डकार्ड के साथ उस पर लूप होता हूं:
for file in *n
do
echo "$file"
done
... मुझे कोई आउटपुट नहीं मिलता है!
लेकिन अगर मैं वाइल्डकार्ड के साथ उपसर्ग करता हूं ./
,
for file in ./*n
do
echo "$file"
done
./-n
... मैं फ़ाइल नाम देख रहा हूँ।
यह प्रदर्शन उद्देश्यों के लिए एक सरल उदाहरण है; यह भी देखें कि ईको से बेहतर क्यों है प्रिंट? इस कारण से और अन्य। अन्य उपयोगिताओं को अन्य विकल्पों के साथ जोड़ दिया जाएगा, इसलिए यह संभव है कि फ़ाइल नाम को उपयोगिताओं के लिए यथासंभव सुरक्षित रूप से प्रस्तुत किया जाए। यदि आप वाइल्डकार्ड को "भागने" फ़ाइल नाम से उपसर्ग नहीं करते हैं , तो आपको अपनी उपयोगिताओं को अन्य तरीकों से "सुरक्षित" करना होगा; एक सामान्य--
उदाहरण के साथ विकल्पों के अंत का संकेत देना है :
for file in *n
do
mv -- "$file" backup/"$file"
done
... जो सुरक्षित रूप से -n
फाइलनाम को पास करेगा mv
(जैसा कि नीचे देखा गया है set -x
):
mv -- -n backup/-n
./*
यह है कि यह सुनिश्चित करता है कि जिन नामों से शुरुआत होती है-
उन्हें विकल्प के रूप में नहीं माना जाता है।