zsh में, मैं कैसे कार्यों में गुमनाम सरणियों पारित करते हैं? जैसेzsh में, मैं कैसे कार्यों में गुमनाम सरणियों पारित करते हैं?
foo() {
echo ${1[2]} '\n';
}
a=(abc def ghi)
foo $a
--> def
या आदर्श:
foo (abc def ghi)
zsh में, मैं कैसे कार्यों में गुमनाम सरणियों पारित करते हैं? जैसेzsh में, मैं कैसे कार्यों में गुमनाम सरणियों पारित करते हैं?
foo() {
echo ${1[2]} '\n';
}
a=(abc def ghi)
foo $a
--> def
या आदर्श:
foo (abc def ghi)
एक समाधान पता लगा: की तरह कुछ के लिए देख रहा
foo() {
local a=$1
local b=$2
echo ${(j:---:)${=b}}
foreach d in ${${=b}}
do
echo $d
done
}
कहाँ parameter2 सफेद अलग पाठ, उदा की एक श्रृंखला है 'एक badkljf odod'
यह आपकी विशेष अप्रत्याशित आवश्यकताओं के लिए एक समाधान हो सकता है, लेकिन इस प्रश्न के साथ इसमें बहुत कुछ नहीं है। यह सवाल का एक एवर है, "मैं पैरामीटर कैसे विभाजित करूं?" – peth
आप नहीं कर सकते। कार्य किसी भी अन्य कमांड की तरह स्थितित्मक पैरामीटर लेते हैं।
यह भी ध्यान रखें कि आपके वैकल्पिक हल "सरणी" तत्वों के किसी भी खाली स्थान के शामिल होने की अनुमति नहीं है।
साफ बात मैं के बारे में सोच सकते हैं की आवश्यकता है कि फोन करने वाले एक स्थानीय सरणी बनाने के लिए, तो समारोह से इसे पढ़ने के लिए है:
$ foo() {
for element in $FOO_ARRAY
do
echo "[$element]"
done
}
$ local FOO_ARRAY; FOO_ARRAY=(foo bar baz quux)
$ foo
[foo]
[bar]
[baz]
[quux]
मैं जानता हूँ कि पार्टी इसके पूरा सिस्टम के लिए इसी तरह की कलाबाजी करता है, और मुझे लगता है कि zsh भी हो सकता है। यह बहुत असामान्य नहीं है।
एक गुमनाम सरणी के साथ हल नहीं ... लेकिन मैं इस बात की कोशिश की !! मार !! ...
function join {
local tmp=($1)
for ((i=0 ; i<${#tmp[@]}-1 ; i++)) ; do
echo -n ${tmp[$i]}$2
done
echo ${tmp[$i]}
}
test="abc def ghi"
join "$test" "|"
आप कार्य करने के लिए सरणी के नाम पारित कर सकते हैं और उसके बाद समारोह में एक चर नाम के रूप में नाम की व्याख्या द्वारा सरणी पढ़ सकते हैं। यह एक ऐसी तकनीक है जो बाश में सहयोगी सरणी जैसी चीजों के लिए भी उपयोगी है। जेडएसएच इसे करना बहुत आसान बनाता है, क्योंकि (पी) ऑपरेटर वांछित तरीके से चर की व्याख्या करेगा।
एक उदाहरण यह स्पष्ट कर देगा। आप इस समारोह को परिभाषित करते हैं: फिर
function i_want_array() {
local array_name=$1
echo "first array element is: " ${(P)${array_name}[1]}
}
निम्नलिखित कोड निष्पादित होगा:
% a=(one two three)
% i_want_array "a"
first array element is: one
और बस स्पष्ट करने के लिए, यह असली सरणी पर काम से काम करता है, इसलिए किसी भी खाली स्थान के सही ढंग से नियंत्रित किया जाता है:
% a=("one two" three)
% i_want_array "a"
first array element is: one two
यदि आपको केवल एक सरणी पैरामीटर की आवश्यकता है: पूंछ तर्क के रूप में।
foo() {
: if you have any leading non-array args, grab those first:
local arg1="$1"
shift
local arg2="$1"
shift
: now [email protected] is your array arg
echo [email protected][2] '\n';
}
a=(abc def ghi)
foo "arg 1" arg2 $a
--> def
ध्यान दें कि वास्तव में ऊपर कुछ भी काम नहीं करता है। –