لماذا لا يمكنني الحصول على هذا الخطأ باستخدام {1..9} في zsh?

StackOverflow https://stackoverflow.com/questions/805361

  •  03-07-2019
  •  | 
  •  

سؤال

تشغيل التعليمات البرمجية التالية

zgrep -c compinit /usr/share/man/man{1..9}/zsh*

أحصل على

zsh: no matches found: /usr/share/man/man2/zsh*

هذا أمر غريب لأن الأعمال التالية

echo Masi{1..9}/masi

هذا يشير إلى أن المشكلة قد يكون الخلل في Zsh.

هو فوق الخلل في Zsh ل {1..9}?

هل كانت مفيدة؟

المحلول

انها ليست علة ، وهي تعمل داخل الكلمات الجميلة.المشكلة كنت تواجه هنا هو أن {1..9} ليس تعبير البدل مثل * ؛ كما إيكو يظهر المثال ، تكرارية التوسع.حتى zgrep سبيل المثال هو نفسه تماما كما لو كنت قد كتبته كل إصدار بديل في سطر الأوامر ثم حيث لا توجد صفحات الرجل بدءا zsh في man2 ، أخطاء بها.(انها erroring على الفشل في العثور على تطابق ، وليس أي شيء يرتبط ارتباطا عضويا الخاص بك هدفين تسلسل التوسع.)

إذا كنت فعلت هذا ، من ناحية أخرى:

zgrep -c compinit /usr/share/man/man[1-9]/zsh*

سوف تحصل على النتائج التي كنت تتوقعها ، لأن [1-9] طبيعي البدل التعبير.

نصائح أخرى

في zsh, إذا كنت ترغب في استخدام النطاقات في أسماء الملفات ، zle يقدم <1-n> على أي الأسماء الحقيقية يمكن أن التوسع في.وهذا هو القول:

$ touch a0b a1b a5b a7b
$ print a<0-100>b

ثم ضرب <Tab> مباشرة بعد النهائي b سوف أترككم مع print a0b a1b a5b a7b توسعت على الخط.

لجميع النوايا والمقاصد - ربما مجموعة كاملة من متطلبات غير ملف البرمجة استخدام - أود أن أعرب عن هذا باستخدام بدلا البليغ الاصطلاحية zsh حلقة النحو التالي:

for n ({1..50}); do print $n; done

سوف تسمح لك العملية كاملة تسلسل مجموعة من الأرقام من 1 إلى 50 :) وبعد ذلك يمكنك أن تفعل كل أنواع الأشياء المفيدة ، مثل ملف المجموعة التي لا وجود لها حتى الآن:

arr=($(for n ({1..50}); do print /my/path/file$n.txt; done)) && print $arr[33]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top