2011-10-12 17 views
7

उदाहरण के लिए, मैं "एक, दो, तीन" को अल्पविराम के रूप में अल्पविराम के साथ विभाजित करना चाहता हूं और परिणामस्वरूप तीन सबस्ट्रिंग को अलग-अलग संसाधित करने के लिए एक लूप का उपयोग करना चाहता हूं।मैं सीएसएच में एक स्ट्रिंग कैसे विभाजित करूं?

उत्तर

5

उदाहरण के लिए:

set s = "one,two,three" 
set words = `echo $s:q | sed 's/,/ /g'` 
foreach word ($words:q) 
    echo $word:q 
end 

लेकिन विचार करें कि क्या csh जो कुछ भी काम आप कर रहे हैं के लिए सही उपकरण है:

http://www.bmsc.washington.edu/people/merritt/text/cshbad.txt

+0

धन्यवाद। क्या करता है: क्यू का मतलब यहाँ है? – zzhang

+0

यह चर को उद्धृत करता है; '$ s: q'' $ s "के समान है। इस उदाहरण के लिए इसकी आवश्यकता नहीं है, लेकिन यह अन्य मामलों में हो सकता है (कहें, जहां आपके पास डेटा में व्हाइटस्पेस है)। –

7

प्रस्तुत मौजूदा से एक अधिक आसान समाधान का उपयोग करना शामिल अंतर्निहित प्रतिस्थापन मोडिफ़र - इस उदाहरण में लूप या बाहरी कमांड प्रतिस्थापन का अपमानजनक रूप से उपयोग करने की कोई आवश्यकता या कारण नहीं है:

set list = one,two,three 
set split = ($list:as/,/ /) 

echo $split[2] # returns two 

() एक सूची बनाता है, एस प्रतिस्थापन संशोधक है और: जितना आवश्यक हो उतना बार प्रतिस्थापन दोहराता है।

इसके अलावा, टी/सीएसएच को नंगे तारों के उद्धरण की आवश्यकता नहीं होती है, न ही चर जो मजबूर मूल्यांकन की आवश्यकता नहीं होती है।

1
set list = one,two,three 
foreach i ($list:as/,/ /) 
    echo $i 
end 
संबंधित मुद्दे