কোনও মিল নেই এমন কীভাবে চুপচাপ কোনও গ্লোব প্যাটার্ন থেকে খালি স্ট্রিং পাবেন get


24

বলুন আমার কাছে তিনটি ফাইল সহ একটি ফোল্ডার রয়েছে:

foo1
foo2
bar

1. আমি যদি চালাতে

list_of_files=$(print foo*)
echo $list_of_files

আমি পাই: foo1 foo2

২.আমি যদি দৌড়াই

list_of_files=$(print bar*)
echo $list_of_files

আমি পাই: bar

৩. তবে আমি যদি দৌড়ে যাই

list_of_files=$(print other*)
echo $list_of_files

আমি পেয়েছি: zsh: no matches found: other*(পরিবর্তনশীল $list_of_filesযদিও খালি)


যদি কোনও গ্লোব সম্প্রসারণের সাথে মেলে না যায় তবে zsh কে অভিযোগ না করার জন্য বলার উপায় আছে কি?

আমার লক্ষ্য হ'ল প্রদত্ত গ্লোব প্যাটার্নের সাথে মিলে যাওয়া ফাইলগুলির একটি তালিকা নিঃশব্দে সংগ্রহ করার জন্য উপরের প্রক্রিয়াটি ব্যবহার করা ।

উত্তর:


33

গ্লোব কোয়ালিফায়ার null_globদিয়ে আপনার প্যাটার্নের জন্য বিকল্পটি চালু করুন N

list_of_files=(*(N))

আপনি যদি কোনও স্ক্রিপ্ট বা ফাংশনে সমস্ত নিদর্শনগুলিতে এটি করে থাকেন তবে null_globবিকল্পটি চালু করুন :

setopt null_glob

এই উত্তরে বাশ এবং ksh সমতুল্য রয়েছে।

printবিকল্প ব্যবহার বা কমান্ড ব্যবহার করবেন না ! এটি স্ট্রিংয়ের তালিকার পরিবর্তে ফাইলের নামগুলির মধ্যে ফাঁকা বিশিষ্ট স্ট্রিং তৈরি করে। (দেখুন শব্দের বিভাজন কী? শেল প্রোগ্রামিংয়ে এটি গুরুত্বপূর্ণ কেন? )


15

ভাল উপায়: for a in *(.N); do ... ; done। এন বিকল্পটি zsh এর জন্য একটি খালি তালিকা সরবরাহ করে এবং এর জন্য শূন্য বার পুনরাবৃত্তি হবে।

নজর রাখুন ls *.foo(.N); যখন ls একটি খালি যুক্তি তালিকাটি পায়, এটি কোনওটির পরিবর্তে সমস্ত ফাইল তালিকাভুক্ত করে। এ কারণেই আমি NULL_GLOB (বা এর ব্যাশ সমতুল্য) পছন্দ করি না: এটি সমস্ত গ্লোব পরিবর্তন করে এবং সহজেই কলগুলি ব্রেক করে যেমন উদাহরণস্বরূপ ls।


অভিনব আপনার উত্তর এখানে দেখুন @ আর্ট, এটি আমার প্রয়োজন মাত্র।
gtd

কেন .(.N)? অন্যান্য উত্তরগুলি (N)নিজেই রয়েছে, পার্থক্য কী?
মাইকেল ডারস্ট

প্রশ্নটি ফাইলগুলির বিষয়ে ছিল, এবং .কেবলমাত্র ফাইলগুলি মেলে বিশ্বকে সীমাবদ্ধ করে।
ARNT

4

আমি মনে করি আপনি NULL_GLOBবিকল্পটি সন্ধান করছেন:

   NULL_GLOB (-G)
          If a pattern for filename generation has no matches, delete  the
          pattern  from  the  argument list instead of reporting an error.
          Overrides NOMATCH.

-1

এইভাবে চেষ্টা করুন:

list_of_files=$(print other*) 2>/dev/null

এটি স্টার্ডার থেকে ত্রুটি আউটপুট / দেব / নালকে পুনর্নির্দেশ করবে এবং এটি প্রদর্শিত হবে না।


এটি মোটেই কাজ করে না।
পাবলো ওলমোস ডি আগুয়েলেরা সি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.