{1,2,3} এবং {1..3 between এর মধ্যে পার্থক্য


17

ক্রম {1,2,3}এবং এর মধ্যে পার্থক্য আছে কি {1..3}?

উদাহরণস্বরূপ যদি আমার কাছে কিছু ফাইল থাকে

file.1
file.2
file.3

এবং আমি catতাদের একসাথে চাই এটি ব্যবহার করা নিরাপদ cat file.{1..3} > file?

আমি যা জানি তা cat file.*>fileসমস্যার কারণ হতে পারে কারণ শেল কখনও কখনও এলোমেলো উপায়ে ফাইলগুলি প্রসারিত করতে পারে (আমি মনে করি এটি ইনোডের উপর নির্ভর করে, তাই না?)


1
ব্যবহারcat file.[123] >file
মাইকজার্ভের

3
ক্রম প্রসারণের file.*ক্রমটি ইনোডগুলির উপর নির্ভর করে না। এটি সর্বদা তাদের অভিধানভুক্ত করে, যা আপনার অবস্থানের সেটিংয়ের উপর নির্ভর করতে পারে।
বারমার

1
"ইনোডগুলির উপর নির্ভর করে" আরও ভাল গবেষিত অপরাধী-মন-একসু "কম্পিউটার" দৃশ্যের এক ধাপের মতো শোনাচ্ছে।
অ্যালেক টেলি

1
@ মিকসার্ভ, আমি বিশ্বাস করি আমি এটি পেয়েছি — এটি শেল গ্লোব, সুতরাং এটি কেবল প্রকৃতপক্ষে উপস্থিত ফাইলগুলিতে প্রসারিত হয় তাই না? বনাম file.{1..3}যা তাদের বিদ্যমান বা না থাকায় তিনটিতেই প্রসারিত।
ওয়াইল্ডকার্ড

1
@ উইল্ডকার্ড - ডান, যতক্ষণ না অন্তত একটি উপস্থিত থাকে, ততক্ষণ। যদি তা না হয় তবে তা প্রসারিত হয় না এবং খুব catত্রুটিযুক্ত file.[123] not foundবা খুব দরকারী।
মাইকজার্ভ

উত্তর:


18

{1..3}এবং {1,2,3}একই ফলাফল উত্পাদন করে তবে ভিন্ন উপায়ে।

সাধারণভাবে, {n1..n2}(যা প্রথম থেকে এসেছেন zsh, bashএবং kshএটা পরে অনুলিপি করেছে) যেখানে n1এবং n2পূর্ণসংখ্যার মধ্যে সব সংখ্যার উত্পাদন n1এবং n2{x,y,z}তিনটি অক্ষর উত্পাদন করার সময় x, yএবং z

আপনার ক্ষেত্রে, আপনি ব্যবহার করা নিরাপদ cat file.{1..3} > file

এখন, এর ক্ষেত্রে cat file.*>file, আপনি শেল গ্লোব্বিং ব্যবহার করেছেন , যা সমস্ত ফাইলের নাম দিয়ে শুরু করে file.এবং ফলাফলটি বর্তমান লোকালে কোলেশন ক্রমের ভিত্তিতে সাজানো হবে।

আপনি এখনও নিরাপদ, কিন্তু যখন আপনার 10 টিরও বেশি ফাইল থাকে তখন আর হয় না। {1..10}দিতে হবে 1 2 3 4 5 6 7 8 9 10। গ্লোব্বিংয়ের সাথে, আপনি পাবেন1 10 2 3 4 5 6 7 8 9


8

পার্থক্যটি হ'ল একটি তালিকা এবং অন্যটি একটি ক্রম। {1,2,3}তিনটি নির্দিষ্ট উপাদান , এবং 1, পর্যন্ত প্রসারিত হয় । এক এবং তিনটির মধ্যে সংখ্যার তালিকায় প্রসারিত হয়। এই বিশেষ ক্ষেত্রে, এগুলি একই এবং আপনি দুটির যে কোনও একটি ব্যবহার করতে পারেন। যার নাম দিয়ে শুরু হয় বর্তমান ডিরেক্টরিতে সমস্ত ফাইল এবং ডিরেক্টরিতে প্রসারিত হবে । যদি আপনার কেবল থাকে , এবং তাও অন্য দুটির সাথে সমান।23{1..3}file.*file.file.1file.2file.3

কারণ এটির সমস্যার কারণ, আমি দেখতে পাচ্ছি না। আপনি হয়ত ভাবছেন

$ cat file.* > file.txt
cat: file.txt: input file is output file

তবে এটি সম্পূর্ণ আলাদা বিষয়। কেবলমাত্র অন্য একটি সমস্যা যা আমি ভাবতে পারি তা হ'ল আপনার শেলটি সঠিক ক্রমে ফাইলগুলি তালিকাবদ্ধ না করে। উদাহরণ স্বরূপ:

$ touch file1 file11 file2
$ echo file*
file1 file11 file2

এটি সমাধান করার জন্য, আপনি এর zshপরিবর্তে ব্যবহার করতে পারেন bash(বিশদটির জন্য এখানে দেখুন):

% echo f*(n)
file1 file2 file11

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


সেখানে একটি সমস্যা হবে না *যদি আমি বেশী বা সমান 10 ফাইল ছিল, আমি যদি সঠিক অনুক্রমে উপর নির্ভর করে?
১ss

1
@ সিস নং আপনার যদি ARG_MAXফাইলের চেয়ে বেশি থাকে তবে সমস্যা হবে 10
উপায়ের

1
@ ইটারডন তিনি জিজ্ঞাসা করছিলেন যে তারা সংখ্যাসমূহে উপস্থিত হবে (যেমন "1, 10, 2" নয়), তারা যুক্তির অ্যারেটিকে উপচে ফেলবে কিনা তা নয়।
র্যান্ডম 832

3
@terdon আমার মনে হয় @ সাইস ঠিক আছে যে আউটপুটটি cat *সঠিকভাবে সংজ্ঞায়িত হয়নি। আউটপুট শেল এবং পরিবেশের উপর নির্ভর করে। দেখুন সেবাস্টিয়ান এর মন্তব্য
মার্কো

এর .txtসাথে ইস্যুটি সমাধান করবেন না file.*?
ইসমাইল মিগুয়েল

6

সেগুলি একই, তবে এটি উপলভ্য থাকলে আপনার ইনস্টল করা বাশ সংস্করণ নির্ভর করে।

এই পৃষ্ঠা থেকে :

{xxx,yyy,zzz,...} probably in all bash versions

{a..z} introduced in bash 3

{<START>..<END>..<INCR>} new in bash 4
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.