"বিড়াল {ফু}" কেন আউটপুট ফু নয়, তবে "বিড়াল {ফু, বার does" করে?


12

আমি সাব-ফোল্ডারগুলিতে পাঠ্য ফাইলগুলিকে একত্রিত করার চেষ্টা করছিলাম এবং চেষ্টা করেছি:

cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var

তবে এটি কিছুই ফেরেনি। সুতরাং, একটি বিদ্যমান 'সাবফোল্ডার 2' যুক্ত করার চেষ্টা করেছি

cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var

এবং এবার এটি কার্যকর হয়েছে, সাফল্যের সাথে ফাইলগুলি কনটেন্টেট করে। কেন এমন হয়?


2
আপনি কী কমান্ড লাইন পেয়েছেন তা দেখার echoপরিবর্তে ব্যবহার করুন cat। (বা set -xডিবাগিংয়ের জন্য ব্যবহার করুন ))
পিটার কর্ডেস

উত্তর:


22

সংজ্ঞা অনুসারে, জিএনইউ ব্যাশে ব্রেস সম্প্রসারণের জন্য হয় সিকোয়েন্স এক্সপ্রেশন বা কমা-বিভাজিত মানগুলির একটি সিরিজ:

ধনুর্বন্ধনী প্রসারিত করতে প্যাটার্নগুলি alচ্ছিক উপস্থাপকের আকার ধারণ করে, পরে কমা-বিচ্ছিন্ন স্ট্রিংগুলির একটি সিরিজ বা একটি ধনুর্বন্ধনী জোড়ের মধ্যে ক্রম প্রকাশ, পরে একটি postsচ্ছিক পোস্টস্ক্রিপ্ট হয়।

আপনি বিশদ জন্য ম্যানুয়াল পড়তে পারেন ।

কয়েকটি সাধারণ নমুনা:

echo {subfolder1}
{subfolder1}

echo {subfolder1,subfolder2}
subfolder1 subfolder2

echo subfolder{1}
subfolder{1}

echo subfolder{1..2}
subfolder1 subfolder2

21

{subfolder1}{subfolder1}কোনও বিকল্প নেই বলে মূল্যায়ন করে to subfolder1পরিবর্তে ব্যবহার করুন।


2
মনে রাখবেন যে এটি csh(যেখানে ব্রেস সম্প্রসারণ থেকে আসে), tcshবা থেকে আলাদা fish
স্টাফেন চেজেলাস

1

ব্রেসগুলি কেবল তখনই প্রসারিত হবে যখন তাদের মধ্যে কোমা দ্বারা পৃথক স্ট্রিং রয়েছে, যেমন {abc, def {বা ব্যাপ্তি, যেমন between a..e them তাদের মধ্যে নির্দিষ্ট করা হয়েছে।

আপনার ক্ষেত্রে আপনি কেবল সাবফোল্ডার 1 লিখতে পারবেন না এটি বন্ধনীগুলিতে আবদ্ধ না করে কারণ এর প্রয়োজন নেই

cat ./{mainfolder1,mainfolder2,mainfolder3}/subfolder1/book.txt > out$var

দুর্ভাগ্যক্রমে, দুটি স্ট্রিং /path/{a,}/filenameপর্যন্ত প্রসারিত হয় এবং এটি অযাচিত হতে পারে। /path/a/filename/path//filename
কুসালানন্দ

ধন্যবাদ আমাকে কুশলানন্দ আমাকে সুস্থ করার জন্য, হ্যাঁ বাশ একটি সতর্কতা জোগান দেবে "অস্পষ্ট পুনঃনির্দেশ"
নিও_আর্টর্নস

না, আপনি ambiguous redirect যদি অকেজো ভেরিয়েবলের দেওয়া কোনও ফাইলে পুনর্নির্দেশের চেষ্টা করেন তবে এর কোনও মূল্য নেই, যেমন আপনি পেয়েছেন echo 'hello' >$idontexist
কুসালানন্দ

1
... অথবা যদি পুনঃনির্দেশে থাকা ফাইলের নামটি একাধিক কথায় প্রসারিত হয়। > *.txtএকাধিক .txtফাইলের মতো বা হোয়াইটস্পেস > $fileথাকলে Like $fileতবে অবশ্যই catএকাধিক যুক্তি দেওয়ার ক্ষেত্রে অস্পষ্ট কিছুই নেই
ইলক্কাচু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.