ये साल का फिर वही समय है! जब स्टोर रंगीन स्पार्कली लिट-अप प्लास्टिक के टुकड़े डालना शुरू करते हैं, तो हम सभी थोड़ा उत्सव महसूस करने लगते हैं, और उत्सव से मेरा मतलब है कि चलो खरीदारी करते हैं। विशेष रूप से, अवकाश उपहार खरीदारी! (आपके लिए उपहार अभी भी तकनीकी रूप से उपहार हैं।)
बस इसलिए कि यह सब पूरी तरह से पागल नहीं हो जाता है, आपको कुछ उपहार सूचियां बनानी चाहिए। बैश मदद कर सकता है।
ब्रेस एक्सपेंशन
ये ब्रेसिज़ नहीं हैं:()
ये भी नहीं हैं:[]
ये ब्रेसिज़ हैं:{}
ब्रेसिज़ बैश को उनके बीच पाए जाने वाले मनमाने तार या तार के साथ कुछ करने के लिए कहते हैं। एकाधिक तार अल्पविराम से अलग होते हैं:{a,b,c} . आप प्रत्येक विस्तारित परिणाम के साथ संलग्न करने के लिए एक वैकल्पिक प्रस्तावना और पोस्टस्क्रिप्ट भी जोड़ सकते हैं। अधिकतर, यह कुछ टाइपिंग को सहेज सकता है, जैसे सामान्य फ़ाइल पथ और एक्सटेंशन के साथ।
आइए प्रत्येक व्यक्ति के लिए कुछ सूचियां बनाएं जिन्हें हम सामान देना चाहते हैं। निम्न आदेश समतुल्य हैं:
touch /home/me/gift-lists/Amy.txt /home/me/gift-lists/Bryan.txt /home/me/gift-lists/Charlie.txt touch /home/me/gift-lists/{Amy,Bryan,Charlie}.txt tree gift-lists
/home/me/gift-lists
├── Amy.txt
├── Bryan.txt
└── Charlie.txt ओह डर्न, "ब्रायन" ने अपना नाम "i" से लिखा है। मैं इसे ठीक कर सकता हूं।
mv /home/me/gift-lists/{Bryan,Brian}.txt
renamed '/home/me/gift-lists/Bryan.txt' -> '/home/me/gift-lists/Brian.txt' शेल पैरामीटर विस्तार
शेल पैरामीटर विस्तार हमें ब्रेसिज़ में संलग्न पैरामीटर में सभी प्रकार के परिवर्तन करने की अनुमति देता है, जैसे टेक्स्ट में हेरफेर और स्थानापन्न करना।
कुछ स्टॉकिंग स्टफर्स हैं जो हमारे सभी गिफ्टी के लायक हैं। आइए इसे एक वैरिएबल बनाते हैं:
STUFF=$'socks\nlump of coal\nwhite chocolate'
echo "$STUFF"
socks
lump of coal
white chocolate
अब tee . की सहायता से इन मदों को हमारी प्रत्येक सूची में जोड़ने के लिए echo . पाने के लिए कमांड और विस्तार अच्छा खेलने के लिए।
echo "$STUFF" | tee {Amy,Brian,Charlie}.txt
cat {Amy,Brian,Charlie}.txt
socks
lump of coal
white chocolate
socks
lump of coal
white chocolate
socks
lump of coal
white chocolate पैटर्न मिलान प्रतिस्थापन
दूसरे विचार पर, शायद कोयले का ढेर इतना अच्छा उपहार नहीं है। आप इसे ${parameter/pattern/string} के रूप में एक पैटर्न मिलान प्रतिस्थापन का उपयोग करके किसी बेहतर चीज़ से बदल सकते हैं :
echo "${STUFF/lump of coal/candy cane}" | tee {Amy,Brian,Charlie}.txt
cat {Amy,Brian,Charlie}.txt
socks
candy cane
white chocolate
socks
candy cane
white chocolate
socks
candy cane
white chocolate
यह "कोयले की गांठ" के पहले उदाहरण को "कैंडी केन" से बदल देता है। सभी उदाहरणों को बदलने के लिए (यदि कई थे), ${parameter//pattern/string} का उपयोग करें . यह हमारे $STUFF . को नहीं बदलता है परिवर्तनशील, इसलिए हम बाद में किसी शरारती व्यक्ति के लिए मूल सूची का पुन:उपयोग कर सकते हैं।
सबस्ट्रिंग
जबकि हम चीजों में सुधार कर रहे हैं, हो सकता है कि हमारे उपहार देने वाले सभी व्हाइट चॉकलेट पसंद न करें। बेहतर होगा कि हम अपनी सूची में कुछ नियमित चॉकलेट को शामिल करें। चूंकि मैं बहुत आलसी हूं, मैं बस ऊपर तीर मारने जा रहा हूं और पिछले बैश कमांड को संशोधित कर रहा हूं। सौभाग्य से, $STUFF . में अंतिम शब्द चर "चॉकलेट" है, जो नौ वर्ण लंबा है, इसलिए मैं बैश को ${parameter:offset} का उपयोग करके बस उस हिस्से को रखने के लिए कहूंगा . मैं tee का उपयोग करूंगा/करूंगी का -a a . पर फ़्लैग करें मेरी मौजूदा सूचियों में जोड़ें:
echo "${STUFF: -9}" | tee -a {Amy,Brian,Charlie}.txt
cat {Amy,Brian,Charlie}.txt
socks
candy cane
white chocolate
chocolate
socks
candy cane
white chocolate
chocolate
socks
candy cane
white chocolate
chocolate आप यह भी कर सकते हैं:
| ऐसा करें | इसके साथ |
|---|---|
| n से सबस्ट्रिंग प्राप्त करें आगे के अक्षर | ${parameter:n} |
| x के लिए सबस्ट्रिंग प्राप्त करें n . से शुरू होने वाले वर्ण | ${parameter:n:x} |
वहां! अब हमारी आधार सूचियां समाप्त हो गई हैं। आइए कुछ अंडे लें।
परीक्षण चर
आप जानते हैं, यह अंडा हो सकता है, लेकिन मुझे लगता है कि मैंने कल एमी के लिए एक सूची शुरू की और इसे एक चर में संग्रहीत किया जिसे मैंने amy कहा होगा। . चलो देखते हैं अगर मैंने किया। मैं ${parameter:?word} . का उपयोग करूंगा विस्तार। यह word लिखेगा मानक त्रुटि के लिए और अगर कोई amy . नहीं है तो बाहर निकलें पैरामीटर।
echo "${amy:?no such}"
bash: amy: no such मुझे नहीं लगता। शायद इसके बजाय ब्रायन थे?
echo "${brian:?no such}"
Lederhosen आप यह भी कर सकते हैं:
| ऐसा करें | इसके साथ |
|---|---|
स्थानापन्न word अगर parameter सेट नहीं है या शून्य है | ${parameter:-word} |
स्थानापन्न word अगर parameter परेशान या शून्य नहीं है | ${parameter:+word} |
असाइन करें word parameter . के लिए अगर parameter सेट नहीं है या शून्य है | ${parameter:=word} |
चेंजिंग केस
सही बात है! ब्रायन ने कहा कि वह कुछ लेडरहोसन चाहते थे और इसलिए मैंने खुद को एक नोट बनाया। यह बहुत महत्वपूर्ण है, इसलिए मैं इसे ${parameter^^pattern} के साथ बड़े अक्षरों में ब्रायन की सूची में जोड़ दूंगा विस्तार। pattern भाग वैकल्पिक है। हम केवल ब्रायन की सूची में लिख रहे हैं, इसलिए मैं केवल >> . का उपयोग करूंगा tee -a . के बजाय ।
echo "${brian^^}" >> Brian.txt
cat Brian.txt
socks
candy cane
white chocolate
chocolate
LEDERHOSEN आप यह भी कर सकते हैं:
| ऐसा करें | इसके साथ |
|---|---|
| पहला अक्षर बड़ा करें | ${parameter^pattern} |
| पहले अक्षर को छोटा करें | ${parameter,pattern} |
| सभी अक्षरों को छोटा करें | ${parameter,pattern} |
सरणी का विस्तार करना
आप जानते हैं क्या, यह सब उपहार-सूचीकरण व्यवसाय बहुत काम का है। मैं स्टोर पर देखी गई चीज़ों की एक सरणी बनाने जा रहा हूँ:
gifts=(sweater gameboy wagon pillows chestnuts hairbrush)
मैं ${parameter:offset:length} . के रूप में सबस्ट्रिंग विस्तार का उपयोग कर सकता हूं इसे सरल बनाने के लिए। मैं पहले दो को एमी की सूची में, मध्य दो को ब्रायन की, और अंतिम दो को चार्ली की सूची में जोड़ दूँगा। मैं printf का उपयोग करूंगा/करूंगी न्यूलाइन के साथ मदद करने के लिए।
printf '%s\n' "${gifts[@]:0:2}" >> Amy.txt
printf '%s\n' "${gifts[@]:2:2}" >> Brian.txt
printf '%s\n' "${gifts[@]: -2}" >> Charlie.txt cat Amy.txt
socks
candy cane
white chocolate
chocolate
sweater
gameboy
cat Brian.txt
socks
candy cane
white chocolate
chocolate
LEDERHOSEN
wagon
pillows
cat Charlie.txt
socks
candy cane
white chocolate
chocolate
chestnuts
hairbrush वहां! अब हमारे पास सुपर वैयक्तिकृत उपहार सूचियों का एक व्यापक सेट है। धन्यवाद बैश! बहुत बुरा यह हमारे लिए भी खरीदारी नहीं कर सकता।