2013-07-23 5 views
5

बाश में, php/{composer,sismo}php/composer php/sismo तक फैलता है। /bin/sh (जो मुझे विश्वास है डैश) के साथ ऐसा करने का कोई तरीका है, सिस्टम खोल? मैं git hooks और would like to stay away from bash as long as I can लिख रहा हूं।डैश बैश के घुंघराले ब्रैकेट वाक्यविन्यास के बराबर है?

उत्तर

5

आप printf का उपयोग कर सकते हैं।

% printf 'str1%s\t' 'str2' 'str3' 'str4' 
str1str2 str1str3 str1str4 
3

ऐसा कोई प्रतीत नहीं होता है। शायद इन कार्यों को उत्पन्न करने के लिए आपको लूप का उपयोग करना होगा, शायद एक समारोह में। या टाइपो को रोकने के लिए "सेट-यू" के साथ, सामान्य भागों को प्रतिस्थापित करने के लिए चर का उपयोग करें।

मुझे लगता है कि आप प्रदर्शन कारणों से डैश पसंद करते हैं, हालांकि आप अपने निर्णय को साबित करने के लिए कोई संख्या प्रदान नहीं करते हैं। मेरा सुझाव है कि आप वास्तविक प्रदर्शन अंतर को मापें और पुनर्मूल्यांकन करें। आप समयपूर्व अनुकूलन के लिए भी गिर रहे हैं। इस बात पर विचार करें कि बैश बनाम संभावित प्रदर्शन ड्रॉप का उपयोग करके आप कितना कार्यान्वयन और डिबगिंग समय बचाएंगे।

+0

मुझे लगता है कि यह वास्तव में समयपूर्व अनुकूलन है, मुझे यकीन नहीं था क्योंकि मैं उस शेल स्क्रिप्ट को नहीं लिखता। मुझे एहसास है कि वे कुछ भी जटिल नहीं करते हैं, इसलिए अंतर केवल स्टार्टअप समय ही होगा ... – greg0ire

+0

@ greg0ire, हां, ज्यादातर स्टार्टअप समय, लेकिन यदि आपके पास कई स्क्रिप्ट आमंत्रण की आवश्यकता है, या कई लोगों का उपयोग करना आपके मामले के लिए अभी भी महत्वपूर्ण हो सकता है आपके कोड में उप-गोले। यदि आपके लिए प्रदर्शन महत्वपूर्ण है, तो इसे एक सामान्य परिदृश्य के लिए मापें। – spbnick

+0

समय मुझे एक अंतर ड्रॉप देता है: bash = 5ms, sh = 3ms। मुझे लगता है कि यह स्वीकार्य है हालांकि। – greg0ire

0

मैं वास्तव में @mikeserv द्वारा प्रदान की printf समाधान है, लेकिन मैंने सोचा कि मैं एक पाश का उपयोग कर एक उदाहरण प्रदान करते हैं, जिस तरह।

यदि आप एक ही कमांड पर तर्क के रूप में दोनों तारों को प्रदान करने के बजाय, प्रत्येक विस्तारित स्ट्रिंग के लिए एक कमांड निष्पादित करना चाहते हैं, तो नीचे शायद सबसे उपयोगी होगा।

for X in composer sismo; do 
    echo "php/$X"     # replace 'echo' with your command 
done 

हालांकि, आप इसे के रूप में

ARGS="$(for X in composer sismo; do echo "php/$X"; done)" 
echo $ARGS       # replace 'echo' with your command 

नोट पुनर्लेखन सकता है कि $ARGS उपरोक्त आदेश में गैर उद्धृत है, और जागरूक मतलब है कि यह है कि इसकी सामग्री wordsplitted जाता है (यानी यदि कोई अपने मूल तार रिक्त स्थान हैं, यह तोड़ देगा)।

संबंधित मुद्दे