zsh स्थानीय सरणी घोषणा अजीब व्यवहार का कारण बनती है


1

मैं zsh में नया हूं और कुछ अजीब व्यवहार की खोज की है, लेकिन यह सबसे ऊपर है।

जब मैं एक zsh फ़ंक्शन में स्थानीय सरणी की घोषणा कर रहा था, तो मैं इस अत्यंत अजीब व्यवहार में आया था कि मैं अपनी .zshrc फ़ाइल के लिए लिख रहा था। जब मैंने एक स्थानीय ऐरे की घोषणा की, तो इसके कारण मेरा उत्साह पागल हो गया। मैंने अंततः इसे दो बहुत ही अजीब कार्यों के लिए वापस ट्रेस किया, जो यादृच्छिक रूप से बनाए गए थे। मैंने इसे एक साधारण मामले में घटा दिया:

% function () { local foobar=(); echo frog; }
% echo ${functions[foobar=]}
        echo frog
% echo ${functions[local]}
        echo frog

पहली अजीब बात यह है कि frogअनाम फ़ंक्शन से कभी भी मुद्रित नहीं होता है। लेकिन वास्तव में अजीब बात यह है कि इसके बजाय दो कार्यों का नाम foobar=और localनिर्माण किया गया है।

यह मेरे zsh शीघ्र के लिए सभी प्रकार की समस्याओं का कारण बनता है। जब भी localकीवर्ड का उपयोग किया जाता है उसे प्रिंट किया जाता है frog

मैं वास्तव में सोच रहा हूं कि उन कार्यों को बनाने के लिए पृथ्वी पर क्या कारण थे।

मै इस्तेमाल कर रहा हूँ zsh 5.0.2

जवाबों:


1

मैंने पाया कि मेरे ज़िश के संस्करण में यह एक बग रहा होगा। मैंने zsh 5.6.2 में अपग्रेड किया और पाया कि व्यवहार उस संस्करण में तय किया गया था। मेरे पास एक सिद्धांत भी है कि समस्या की स्थिति में क्या करने की कोशिश कर रहा था। जब मैं चलता हूं:

% foo bar() echo hi

यह दो कार्य बनाता है, fooऔर bar, दोनों बस echo hi

मुझे लगता है कि zsh local foobar=()दो कार्यों को परिभाषित करने के रूप में व्याख्या कर रहा था : localऔर foobar=। के रूप में मुझे लगता है कि नहीं लगता था कि यह वास्तव में विचित्र है localया foobar=वैध फ़ंक्शन नाम होगा। मैं यह देखने के लिए उत्सुक हूँ कि बग zsh स्रोत में कहाँ था।

मैंने यह भी पाया कि स्थानीय ऐरे को घोषित करने का उचित तरीका है local -a foobar

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.