2012-12-13 15 views
5

मेरी स्क्रिप्ट "script.sh" में, मैं कुछ चर के लिए पहला और दूसरा तर्क संग्रहीत करना चाहता हूं और फिर बाकी को एक और अलग चर में संग्रहीत करना चाहता हूं। इस कार्य को लागू करने के लिए मुझे किस आदेश का उपयोग करना चाहिए? ध्यान दें कि एक स्क्रिप्ट को पारित तर्कों की संख्या अलग-अलग होगी।अलग-अलग चरों में पास किए गए तर्कों को संग्रहीत करना -शेल स्क्रिप्टिंग

जब मैं कंसोल

./script.sh abc def ghi jkl mn o p qrs xxx #It can have any number of arguments 

इस मामले में में आदेश चला, मैं अपने स्क्रिप्ट "abc" और "def" एक चर में संग्रहीत करना चाहते हैं। "ghi jkl mn o p qrs xxx" को किसी अन्य चर में संग्रहीत किया जाना चाहिए।

उत्तर

8

तुम सिर्फ तर्कों को श्रेणीबद्ध करना चाहते हैं:

#!/bin/sh 

first_two="$1 $2" # Store the first two arguments 
shift    # Discard the first argument 
shift    # Discard the 2nd argument 
remainder="$*"  # Store the remaining arguments 

ध्यान दें कि यह मूल स्थितीय तर्क को नष्ट कर देता है, और वे मज़बूती से पुनर्निर्मित नहीं किया जा सकता। एक छोटे से अधिक काम की आवश्यकता है कि वांछित है:

#!/bin/sh 

first_two="$1 $2" # Store the first two arguments 
a="$1"; b="$2"  # Store the first two argument separately 
shift    # Discard the first argument 
shift    # Discard the 2nd argument 
remainder="$*"  # Store the remaining arguments 
set "$a" "$b" "[email protected]" # Restore the positional arguments 
4

स्लाइस [email protected] सरणी। तालिका में

var1=("${@:1:2}") 
var2=("${@:3}") 
+0

ध्यान दें कि जब से इन (जो यह करने के लिए सही तरीका है) सरणियों के रूप में जमा हो जाती है, वे एक विशेष वाक्य रचना के साथ विस्तार किया जाना चाहिए: 'गूंज" पहले दो = "" $ {var1 [@]} "; गूंज "शेष =" "$ {var2 [@]}" ' –

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