`। []। ফু [] b বাশে কি করে? কেন এটি মিলছে `..`?


16

নিম্নলিখিতটি দেখুন:

$ echo .[].aliases[]
..
$ echo .[].foo[]
..
$ echo .[].[]
..
$ echo .[].xyz[]
..
$ echo .xyz[].xyz[]
.xyz[].xyz[]
$ echo .xyz[].[]
.xyz[].[]

স্পষ্টতই এটি কিছু গ্লোব করছে বলে মনে হচ্ছে তবে কীভাবে ফলাফল একসাথে আসে তা আমি বুঝতে পারি না। আমার বোঝা থেকে []একটি খালি চরিত্র শ্রেণি। এটা স্বজ্ঞাত হবে যদি

  • এটি কেবল খালি স্ট্রিংয়ের সাথে মেলে; এই ক্ষেত্রে, আমি আশা করব বাশ পুরোপুরি পুনরুত্পাদন করবে যেহেতু এই ডিরেক্টরিতে কোনওটির সাথে এটি মেলে না, তবে ..aliases(প্রথম উদাহরণে) এর মতো জিনিসগুলিও মেলে ,
  • বা কিছুই কিছুই না; এই ক্ষেত্রে, আমি বাশকেও মোটামুটি স্ট্রিংটির পুনরুত্পাদন আশা করব।

এটি জিএনইউ বাশ, সংস্করণ 4.4.23 (1) -রিলিজ সহ।

উত্তর:


25

[একটি সেট শুরু হয়। একটি সেট দ্বারা সমাপ্ত হয় ]। তবে একটি উপায় আছে] সেটের অংশ হিসাবে এবং ]এটি প্রথম অক্ষর হিসাবে নির্দিষ্ট করা । যেহেতু খালি সেটটি কোনও অর্থবোধ করে না, এটি অস্পষ্ট নয়।

সুতরাং আপনার উদাহরণগুলি মূলত সমস্ত বিন্দুর পরে একটি সেট থাকে যা একটি বিন্দু থাকে, সুতরাং এটি দুটি বিন্দুর সাথে মেলে।

পরবর্তী উদাহরণগুলিতে কোনও ফাইল খুঁজে পাওয়া যায় না এবং তাই ভার্চাটিমে ফিরে আসে।


4

কেবল উদ্ধৃত স্ট্রিংগুলি গ্লোব্বিংয়ের সাপেক্ষে নয় :

$ echo ".[].aliases[]"
.[].aliases[]

তবে আন-কোট করা স্ট্রিংগুলি গ্লোববিংয়ের সাপেক্ষে। একটি অব্যক্ত স্ট্রিং যা একটি *বা একটি ?(বৈধ) [](বন্ধনী এক্সপ্রেশন) ধারণ করে তার সাথে মিলে যাওয়া ফাইলগুলির তালিকা দ্বারা সংশোধন করা হবে। একই ভাবে হিসেবে *ম্যাচিং ডিরেক্টরির মধ্যে সব ফাইল মধ্যে রূপান্তরিত হবে এবং একটি ?চরিত্র শুধু একটি, একটি (বৈধ) ফাইল ম্যাচ হবে []বন্ধনী ভিতরে অক্ষর ম্যাচ হবে ফাইল। একটি বিন্দু একটি বৈধ অক্ষর:

$ echo a[.]b
a[.]b

$ touch "a.b"
$ echo a[.]b
a.b

কোনওটির সাথে মেলে ]তুলতে এটি বন্ধনীগুলির মধ্যে প্রথম অক্ষর হওয়া উচিত:

$ touch "a]b"
$ ls a[]]b
a]b

একটি খালি বন্ধনী এক্সপ্রেশন কোনও অর্থ দেয় না (এবং প্রসারিত হয় না):

$ touch ab
$ ls a[]b
ls: cannot access 'a[]b': No such file or directory

এই কারণেই এটি কাজ করে:

$ touch a]c abc afc azc a:c a?c aoc 
$ ls a[]bfz:?]c
abc  a:c  a?c  a]c  afc  azc

জন্য [ধারণা অনুরূপ:

$ touch a[c
$ ls a[[]c
a[c

তবে এটি বন্ধনী প্রকাশের যে কোনও অবস্থাতেই হতে পারে:

$ ls a[]bf[z:?]c
abc  a:c  a?c  a[c  a]c  afc  azc

$ ls a[]bfz:?[]c
abc  a:c  a?c  a[c  a]c  afc  azc

আপনার পোস্ট করা স্ট্রিং .[].foo[]একটি বিন্দুর সাথে মিলবে যার পরে a ], a ., a f, a oবা a হয় [। এটি অনুরূপ:

$ echo a[].foo[]c
a[c a]c afc aoc

এবং এটি নিম্নলিখিত হিসাবে মিলবে:

$ touch .] .f .o .[ .a .b .z

$ echo .[].foo[]
.. .[ .] .f .o

নোট করুন যে ডিরেক্টরিটি এন্ট্রি ..তৈরি করার প্রয়োজন হয় না কারণ এটি প্রতিটি ডিরেক্টরিতে ডিফল্টরূপে বিদ্যমান থাকে। তবে একটি সাধারণ বিন্দুটি .কোনও গ্লোবের সাথে মিলবে না কারণ এটি স্পষ্টভাবে মেলানো দরকার (আসলে একটি বিন্দু ব্যবহার করে)।

তবে এটি মেলে না ..aliasesকারণ বন্ধনী এক্সপ্রেশনটি কেবল একটি অক্ষরের সাথে মেলে । বেশ কয়েকটি অক্ষর মেলে আপনাকে একটি *(কিছু) ব্যবহার করতে হবে :

$ touch ..a ..l ..i ..aliases ..alias ..ali
$ echo .[].aliases[]
.. .[ .] .a

$ echo .[].aliases[]*
.. .[ .] .a ..a ..ali ..alias ..aliases ..i ..l
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.