चर की सामग्री पर zsh पुनरावृत्ति का अजीब व्यवहार


2

जब चर की सामग्री पर पुनरावृत्ति होती है तो मुझे ZSH के साथ एक अजीब तरह का भय होता है। एक डेमो इस मामले में लंबी बातचीत से बेहतर है, इसलिए यहां मेरी समस्या है:

(yoann@freya) test_bash » ls
file1  file2  file3
(yoann@freya) test_bash » for f in $(ls); do echo $f-SUF; done
file1-SUF
file2-SUF
file3-SUF
(yoann@freya) test_bash » files=$(ls); for f in $files; do echo $f-SUF; done 
file1
file2
file3-SUF
(yoann@freya) test_bash »

मैं दूसरी पुनरावृत्ति की उम्मीद करता हूं कि पहले वाले के समान परिणाम होगा। मैंने निम्नलिखित कोशिश की है:

  • अन्य लोगों का ZSH (समान वितरण): ठीक काम किया
  • मेरी मशीन पर बैश के साथ: ठीक काम किया
  • मेरी .zshrc निकालें: समस्या बनी रही।
  • यदि मैं करता हूँ

    फ़ाइलों = $ (ls); f में $ के लिए (गूंज $ फाइलें | tr '\ n' ''); इको $ एफ-एसयूएफ करो; किया हुआ

यह बढ़िया काम करता है। लेकिन एक बार फिर, अगर मैं ट्रे पर लगाए गए इको के परिणाम को कैप्चर करता हूं, तो मुझे केवल एक -SUF मिलता है।

मैं वास्तव में विचारों से बाहर हूं कि क्या हो रहा है, क्या किसी का कोई सुराग है?

धन्यवाद।

कुछ जानकारी:

  • वितरण: डेबियन व्हीज़ी
  • zsh संस्करण: zsh 4.3.17 (x86_64-अज्ञात-Linux-gnu)

अगर यह किसी काम का हो सकता है:

(yoann@freya) test_bash » locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8

जवाबों:


1

सबसे पहले, इसके आउटपुट को पार्स करनाls एक बुरा विचार है । इसके बजाय (देखें अनुभाग ग्लोबिंग का उपयोग FILENAME पीढ़ी में man zshexpn) आपके मामले में,

for f in *; do
  echo ${f}-SUP
done

कारण यह है कि आपके दोनों उदाहरण bash में काम करते हैं (जब तक कि आपके फ़ाइलनाम आदि में कोई सफेद स्थान नहीं हैं), यह है कि bash डिफ़ॉल्ट रूप से सफेद रिक्त स्थान पर मापदंडों को विभाजित zshकरता है , जो ऐसा नहीं करता है। आप zshइस विकल्प के साथ भी इस व्यवहार को प्राप्त कर सकते हैं :

setopt SH_WORD_SPLIT

से स्पष्टीकरण man zshoptions

SH_WORD_SPLIT अनियोजित पैरामीटर विस्तार पर प्रदर्शन करने के लिए फ़ील्ड विभाजन का कारण बनता है । ध्यान दें कि इस विकल्प का शब्द विभाजन से कोई लेना-देना नहीं है। (खंड `पैरामीटर विस्तार 'देखें।)

लेकिन कृपया उपरोक्त लिंक में दी गई सलाह को गंभीरता से लें!

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