`$ {F // / _}` में दोहरे स्लैश का क्या अर्थ है?


18

मैं बैश सीख रहा हूं, और मैं अंतरिक्ष पात्रों को अन्य "गैर रिक्त" पात्रों के साथ बदलना चाहता हूं। मैं एक forलूप का उपयोग कर रहा हूं :

for f in *\ *; do mv "$f" "${f// /_}"; done

मेरा सवाल यह है कि डबल स्लैश और स्पेस में क्यों हैं ${f// /_}? क्या करता ${f// /_}है?


4
यदि आपको इसे दिल से सीखने की ज़रूरत नहीं है, तो आपको कम से कम यह जानना चाहिए कि इसके बारे में कहां पढ़ा जाना चाहिए: यह बैश मैनुअल में है
ग्लेन जैकमैन

जवाबों:


20

bashपैरामीटर विस्तार का उपयोग करके एक प्रतिस्थापन पैटर्न ।

में ${f// /_}:

  • डबल स्लैश //अंतरिक्ष की सभी घटनाओं को प्रतिस्थापित करने के लिए हैं _, यदि आप एक स्लैश डालते हैं, तो /केवल पहला स्थान बदलने जा रहा है

  • अंतरिक्ष वहाँ है क्योंकि आप अंतरिक्ष की जगह ले रहे हैं (अंडरस्कोर के साथ)

तो पैटर्न मूल रूप से है:

${parameter//find/replace}

man bashअधिक विचार प्राप्त करने के लिए जाँच करें ।

एक बार में Parameter Expansionअनुभाग पाने के लिए man bash:

LESS=+/'Parameter Expansion' man bash

3
संक्षेप में, इसकी एक वैश्विक खोज और जगह है।
ग्लेन जैकमैन

4

अनुभाग का "{f// /_}अर्थ है हर जगह को अंडरस्कोर और अंडरस्कोर। यह बैश पैरामीटर विस्तार का उपयोग कर रहा है, जिसमें fपरिभाषित चर for f in *\ *;को शेल विस्तार (ग्लोबिंग) के हर मैच के माध्यम से चलाया जाएगा। हर बार मिला फ़ाइल नाम मान बन जाएगा $f

पैरामीटर विस्तार का //अर्थ है चरित्र के हर घटना के बाद काम करना //(इस उदाहरण में स्थान), के बाद चरित्र द्वारा प्रतिस्थापित किया जाना चाहिए /(इस उदाहरण में अंडरस्कोर)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.