Ls [13] এবং ls {1,3 between এর মধ্যে পার্থক্য কী?


11

কমান্ডটি ব্যবহার করে আমি আমার ডিরেক্টরিতে তিনটি ফাইল তৈরি করেছি touch inv{1..3}.txt। এখন আমি দুটি কমান্ড ব্যবহার করেছি এবং তাদের আউটপুট বেশ একইরকম। এই দুটি আদেশ হ'ল ls inv[13].txtএবং ls {1,3}.txt

তাহলে এই দুইটি কীভাবে আলাদা? বন্ধনীগুলির তুলনায় স্কোয়ার বন্ধনী কীভাবে আলাদা? এছাড়াও আমি "লিনাক্স [..]" এর জন্য গুগল করছিলাম, তবে কিছুই খুঁজে পেলাম না, তাই কি আমি জানতে পারি যে লিনাক্স পরিভাষায় এই জিনিসগুলি কী বলা হয়?

ধন্যবাদ


2
এর নাম হ'ল "ফাইলের নাম সম্প্রসারণ" বা "গ্লোব্বিং"।
বাইট কমান্ডার

এর মধ্যে কোনটি ফাইলের নাম সম্প্রসারণ বা গ্লোববিং? এটি কি বর্গাকার বন্ধনী ([.. ..)) বা ফুল বন্ধনী ({..})?
পজিক্সিং

উত্তর:


14
  • {}বলা হয় বন্ধনী সম্প্রসারণ। এটির দুটি রূপ রয়েছে: {x..y}এবং {x,y}, কোনও বর্ণানুক্রমিক বা সংখ্যাসূচক মান প্রতিস্থাপন xএবং yসহ।

    প্রথম ফর্ম, {x..y}থেকে সব মান সম্প্রসারিত হবে xথেকে yসমেত। উদাহরণস্বরূপ, {2..5}সম্প্রসারিত করা হবে 2, 3, 4, 5

    দ্বিতীয় স্পষ্ট আকারে, {x,y}কেবল সম্প্রসারিত হবে x, y। উদাহরণস্বরূপ, {2,5}প্রসারিত হবে 2এবং 5

    কোন সম্প্রসারণ সম্ভব হয়, তাহলে প্যাটার্ন আক্ষরিক মধ্যে যেমন চিকিত্সা করা হয় {a..3}

    গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল ফাইল তৈরি / ম্যাচিংয়ের সময়, কোনও ফাইলের ম্যাচ নির্বিশেষে ব্রেস সম্প্রসারণ করা হবে (সম্ভব হলে) করা হবে।

  • []পথের নাম সম্প্রসারণ (বা গ্লোব্বিং) প্যাটার্ন হিসাবে পরিচিত। ব্রেস প্রসারণের বিপরীতে আপনি কেবল ফাইলের সাথে মিলে যাওয়ার সময় এটি ব্যবহার করতে পারবেন, আপনি ফাইল তৈরির সময় এটি ব্যবহার করলে আক্ষরিক আচরণ করা হবে।

    এটির দুটি রূপ রয়েছে: [xyz...]এবং [x-y]

    প্রথম আকারে এটি স্কোয়ার বন্ধনীগুলির মধ্যে যে কোনও একক অক্ষরের সাথে আলাদাভাবে মিলবে অর্থাত প্রতিটি অক্ষর স্বতন্ত্রভাবে আচরণ করা হয়। তাই জন্য [25].txtএটা নামের একটি ফাইল ম্যাচ হবে 2.txtবা 5.txtকিছুদিনের জন্য, বর্তমান ডিরেক্টরির মধ্যে [245].txtএটি নামে কোনো ফাইল ম্যাচ হবে 2.txtবা 4.txtবা 5.txt

    দ্বিতীয় আকারে, পৃথকভাবে মিলানোর আগে প্রথমে একটি পরিসীমা সম্প্রসারণ করা হয়, যদি সম্ভব হয় তবে অক্ষরে অক্ষরে চিকিত্সা করা হয়। সুতরাং জন্য [2-5]. txt, এটা নামে কোনো ফাইল ম্যাচ হবে 2.txtবা 3.txtবা 4.txtবা 5.txt। পরিসর প্রসারিত করা যাবে না, এটা আক্ষরিক উদাহরণ ক্ষেত্রে চিকিত্সা হবে [a-3].txt


এই দুটিয়ের মধ্যে একটি গুরুত্বপূর্ণ আচরণগত পার্থক্য হ'ল যখন বেশি প্যাটার্ন মিলতে হয় এবং যখন আসলে খুব কম ম্যাচ হয়। যেহেতু ব্রেস সম্প্রসারণ করা যাই হোক না কেন, এটি ত্রুটিটি দেখায় যে নির্দিষ্ট ফাইল (গুলি) উপস্থিত নেই এবং পথের নাম প্রসারিত বাকী কোনও ত্রুটি ছাড়াই সম্ভব যা মিলবে তা মিলবে:

$ ls {1..4}.txt
ls: cannot access 4.txt: No such file or directory
1.txt  2.txt  3.txt

$ ls [1-4].txt
1.txt  2.txt  3.txt

বহনযোগ্যতা দ্রষ্টব্য:

[]পথনাম সম্প্রসারণ অপারেটর POSIX অত: পর বোর্ন শেল ও ডেরিভেটিভস মধ্যে পোর্টেবল দ্বারা সংজ্ঞায়িত করা হয়।

ধনুর্বন্ধনী প্রসারণ,, {}POSIX দ্বারা সংজ্ঞায়িত করা হয় না তাই সমস্ত শেলগুলির মধ্যে বহনযোগ্য নয়। উদাহরণস্বরূপ, dash( shউবুন্টুতে) এটি নেই। এটা তোলে থেকে ধার করা হয়েছে cshএবং শুধুমাত্র যেমন নির্দিষ্ট শাঁস কাজ করবে bash, zsh, ksh93, fish। আপনি যে শেলটি ব্যবহার করছেন তা বাস্তবায়নের আগে এটি সমর্থন করে তা নিশ্চিত করুন।


উদাহরণ:

$ touch {1..3}.txt

$ ls {1..3}.txt
1.txt  2.txt  3.txt

$ ls {1,2,3}.txt
1.txt  2.txt  3.txt

$ ls {1..4}.txt
ls: cannot access 4.txt: No such file or directory
1.txt  2.txt  3.txt

$ ls {a..3}.txt
ls: cannot access {a..3}.txt: No such file or directory

$ ls [123].txt
1.txt  2.txt  3.txt

$ ls [1-3].txt
1.txt  2.txt  3.txt

$ ls [1-4].txt
1.txt  2.txt  3.txt

$ ls [a-3].txt
ls: cannot access [a-3].txt: No such file or directory

1
[ ]কোনও মিল নেই যখন বিস্তারের আচরণের উপর নির্ভর করা উচিত কারণ শেল কনফিগারেশনের উপর নির্ভর করে এটি ভিন্ন হতে পারে। আপনি যদি ফাইল ফাইল ব্যবহার করতে চান [বা ]এটি ব্যবহার করতে চান তবে এটি আপনার আদেশে উদ্ধৃত হওয়া উচিত। এটি {13..79}এবং এর মধ্যে পার্থক্যটিও লক্ষ্য করার মতো [13-79]। প্রথম থেকে সীমার মধ্যে সমস্ত নম্বর উত্পাদন করা হবে 13থেকে 79, দ্বিতীয় অক্ষর ম্যাচ হবে 1, 3, 4, 5, 6, 7, এবং 9
ক্যাস্পার্ড

@ ক্যাস্পার্ড হ্যাঁ, এটিই nullglob(বা অনুরূপ) এর জন্য। [13-79]মিলে যাওয়া সম্পর্কে , আমি মনে করি আমি [] `এর প্রতি চরিত্রগত আচরণ সম্পর্কে আমার উত্তরে পরিষ্কারভাবে উল্লেখ করেছি`
হিমাইল

@ হাইমাইল আমি মনে করি এটিও উল্লেখযোগ্য হবে যে {{1..3} `ফর্ম বাশিজম। এটি ড্যাশ কাজ করবে না। আমি মনে করি kshএই বৈশিষ্ট্যটি আছে, কিন্তু এটা mksh এবং pkdsh মত আরো আধুনিক স্বাদে এর
Sergiy Kolodyazhnyy

@ সার্গ বহনযোগ্যতা নোট যোগ করেছেন।
হিমাইল 20

7

দুটি রূপের মধ্যে মূল পার্থক্য এখানে চিত্রিত:

$ ls inv[15].txt
inv1.txt
$ ls inv{1,5}.txt
ls: cannot access 'inv5.txt': No such file or directory
inv1.txt

inv[15].txtএকটি গ্লোব এবং আপনার ফাইল সিস্টেমে ম্যাচের ফাইলগুলির তালিকাকে প্রসারিত করবে। এটি পথের নাম সম্প্রসারণ

inv{1,5}.txtবিস্তৃতি inv1.txtএবং inv5.txtকি ফাইলগুলি আপনার ফাইল সিস্টেমে আসলে নির্বিশেষে। এটি ব্রেস এক্সপেনশন


অন্যান্য মূল পার্থক্য হ'ল আপনি লিখতে পারেন ba{con,tman}এবং বর্গাকার বন্ধনী ব্যবহার করার মতো কোনও সমতুল্য নেই। IOW, ব্রেস সম্প্রসারণ শুধুমাত্র একক অক্ষরের জন্য নয়।
hobbs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.