2011-06-24 15 views
7

क्या किसी स्क्रिप्ट में दिए गए तर्कों में शामिल होने का कोई आसान तरीका है? मुझे [email protected] जैसा कुछ चाहिए, लेकिन यह एक बार में तर्कों को पास करता है। जबतर्कों से जुड़ें - एस्केप स्पेस

./script arg1 arg2 arg3 

my_program के रूप में बुलाया 3 अलग तर्कों के रूप तर्क प्राप्त होगा

$/bin/bash 

./my_program [email protected] 

:

उदाहरण के लिए, निम्न स्क्रिप्ट पर विचार करें। क्या मैं चाहता हूँ, एक तर्क के रूप में सभी तर्क पारित करने के लिए, वहाँ मिलती है -, बुला की तरह कुछ रिक्तियों से अलग:

./my_program arg1\ arg2\ arg3 

उत्तर

13

उपयोग इस एक:

./my_program "$*" 
3

मैं मिला है एक सुंदर समान समस्या आज और इस तरह कोड के साथ आया था (विवेक चेकों भी शामिल है):

#!/bin/sh 

# sanity checks 
if [ $# -lt 2 ]; then 
    echo "USAGE : $0 PATTERN1 [[PATTERN2] [...]]"; 
    echo "EXAMPLE: $0 TODO FIXME"; 
    exit 1; 
fi 

NEEDLE=$(echo $* | sed -s "s/ /\\\|/g") 
grep $NEEDLE . -r --color=auto 

इस छोटे स्क्रिप्ट आप सभी फाई में रिकर्सिवली विभिन्न शब्दों के लिए खोज करने देता है वर्तमान निर्देशिका के नीचे लेस। आप अपने "" (स्पेस) डिलीमीटर को जो कुछ भी पसंद करते हैं उसे बदलने के लिए sed का उपयोग कर सकते हैं। मैं एक बच निकलने वाली पाइप के साथ एक जगह को प्रतिस्थापित करता हूं: "" -> "\ |" परिणामी स्ट्रिंग grep द्वारा पार्स किया जा सकता है।

प्रयोग

शर्तों "TODO" और "FIXME" के लिए खोज:

./script.sh TODO FIXME 

शायद आप सोच सकते: क्यों नहीं बस ग्रेप सीधे कहते हैं?

grep "TODO\|FIXME" . -r 

उत्तर यह है कि मैं परिणामों के साथ एक और अधिक उन्नत स्क्रिप्ट में पोस्ट-प्रोसेसिंग करना चाहता था। इसलिए मुझे एक ही स्ट्रिंग में सभी पास किए गए तर्क (पैटर्न) को संपीड़ित करने में सक्षम होना चाहिए। और यह यहां महत्वपूर्ण हिस्सा है।

कोनराड

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