बैश स्क्रिप्ट फ़ंक्शन के अंदर बहु-शब्द तर्क पास करें, मुझे स्क्रिप्ट के कमांड लाइन तर्कों के साथ काम करना होगा, और तर्कों की एक और सूची के साथ भी काम करना होगा। तो मैं एक फ़ंक्शन में दो तर्क सूचियों को पारित करने का प्रयास कर रहा हूं, समस्या यह है कि बहु-शब्द तर्क विभाजित हो जाते हैं।एक बैश फ़ंक्शन
function params()
{
for PARAM in $1; do
echo "$PARAM"
done
echo .
for ITEM in $2; do
echo "$ITEM"
done
}
PARAMS="[email protected]"
ITEMS="x y 'z t'"
params "$PARAMS" "$ITEMS"
स्क्रिप्ट बुला मुझे
myscript.sh a b 'c d'
a
b
c
d
.
x
y
'z
t'
देता है के बाद से वहाँ दो सूचियों वे कार्य करने के लिए एक पूरे के रूप में पारित किया जाना चाहिए बहु-शब्द आइटम का सम्मान करते हुए, सवाल यह है कि, तत्व पुनरावृति करने के लिए कैसे कर रहे हैं सिंगल कोट्स 'सीडी' और 'जेड टी' में संलग्न है?
मेरे पास जो कामकाज है (नीचे देखें) BASH_ARGV का उपयोग करता है इसलिए मुझे फ़ंक्शन में केवल एक ही सूची उत्तीर्ण करने की आवश्यकता है। हालांकि, मैं क्या हो रहा है और उपर्युक्त काम करने के लिए क्या आवश्यक है इसकी बेहतर समझ लेना चाहता हूं।
function params()
{
for PARAM in "${BASH_ARGV[@]}"; do
echo "$PARAM"
done
echo .
for ITEM in "[email protected]"; do
echo "$ITEM"
done
}
params x y 'z t'
स्क्रिप्ट बुला मुझे
myscript.sh a b 'c d'
c d
b
a
.
x
y
z t
देता है ... कौन सा है मैं इसे कैसे की जरूरत है (जिसमें पहली सूची को छोड़कर उलट है, लेकिन वह संतोषजनक होगा मुझे लगता है)
मुझे लगता है ... तो आप फ़ंक्शन में व्यक्तिगत रूप से आइटम पास कर रहे हैं। मुझे लगता है कि एकमात्र जगह जहां बश उद्धरणों का सम्मान करते समय वस्तुओं में एक स्ट्रिंग को विभाजित करता है, जब कमांड लाइन का अर्थ होता है। – haelix
सरणी तत्वों को '" $ {आइटम्स [@]} "' (डबल कोट्स में) के रूप में पास करने की प्रकृति का प्रत्येक तत्व को "$ {आइटम्स [0]}" $ {आइटम्स [1] के रूप में भेजने का प्रभाव होता है। } "" $ {आइटम [2]} ... 'आदि ... यदि आपने इसे' $ {आइटम्स [@]} के रूप में पास किया है, तो आपको उन तत्वों के साथ शब्द विभाजन मिल जाएगा जिसमें व्हाइटस्पेस था। –