2011-01-28 14 views
62

में कमांड लाइन तर्क बदलें, क्या बैश स्क्रिप्ट में कमांड लाइन तर्क बदलने का कोई तरीका है।बैश

./foo arg1 arg2 

वहाँ स्क्रिप्ट के भीतर ARG1 का मान बदलने के लिए एक रास्ता है: मान लें कि उदाहरण के लिए, एक बैश स्क्रिप्ट निम्नलिखित तरीके से शुरू होता है? कहें,

$1="chintz" 

उत्तर

95

आपको सभी तर्कों को रीसेट करना होगा। उदाहरण बदलने के लिए $3:

$ set -- "${@:1:2}" "new" "${@:4}" 

मूल रूप से आप अपने वर्तमान मूल्यों के setसभी तर्क, एक (रों) कि आप बदलना चाहते हैं के लिए छोड़कर।

"${@:1:2}" notation दो (इसलिए अंकन में 2) स्थितीय तर्क ऑफसेट 1 से शुरू (अर्थात $1) करने के लिए विस्तारित किया गया है। यह इस मामले में "$1" "$2" के लिए एक शॉर्टेंड है, लेकिन जब आप प्रतिस्थापित करना चाहते हैं तो यह अधिक उपयोगी होता है। "${17}"

+1

इसलिए, $ 3 को बदलने के लिए, मुझे $ 1 और $ 2 भी बदलना होगा, है ना? और उन्हें क्या बदलते हैं? "रीसेट" का क्या अर्थ है? – Sriram

+2

बेशक '$ 1' और' $ 2' तक। –

+0

+1: यह बहुत साफ है! – Johnsyweb

17

आप मामले में $1 और $2 बताए और अधिक सार्थक चर (मैं नहीं जानता, input_filename = $1 और output_filename = $2 या कुछ और) और फिर उन चर (input_filename = 'chintz') में से एक को अधिलेखित, स्क्रिप्ट में कोई बदलाव नहीं करने के लिए इनपुट छोड़ने से बेहतर कर रहे हैं, यह कहीं और की जरूरत है।

+0

मैं एक दृष्टिकोण चाहता था जहां मैं इनपुट तर्कों में से एक को बदल सकता था। मुझे ऐसा करने की ज़रूरत थी क्योंकि मैं स्क्रिप्ट से एक मूल्य वापस करना चाहता था। ठाकला द्वारा सुझाए गए उत्तर ने अच्छी तरह से काम किया। जवाब के लिए धन्यवाद!!! – Sriram

+3

@ जॉन्सवेवे सहमत हैं। पठनीयता के लिए, आपका बेहतर तरीका है। – Dss