ব্রেস প্রসারণ: এক লাইনে প্রসারণের পরিবর্তে বেশ কয়েকটি কমান্ড চালাবেন?


11

আপনি যখন ব্যাশে ব্রেস প্রসারণ ব্যবহার করেন তখন এমন কিছু

echo {a,b,c}

হয়ে

echo a b c

এর পরিবর্তে প্রতিটি বিস্তারের জন্য একটি করে 3 টি পৃথক কমান্ডে প্রসারিত করার কোনও উপায় আছে কি?

যাতে:

echo {a,b,c}

হবে

echo a
echo b
echo c

উত্তর:


12

এটি কি কেবল "প্রশ্ন জানতে চাই" প্রশ্নটি রয়েছে, বা এর বাস্তব ব্যবহারের কেস আছে? এটি সম্পন্ন করার জন্য আমরা কিছু জিমন্যাস্টিকের মধ্য দিয়ে যেতে পারি:

$ eval echo\ {a,b,c}\;
a
b
c

তবে আমি আমাদের সিস্টেমের স্ক্রিপ্টগুলিতে এই ধরণের অবলম্বন কমান্ডগুলি প্রেরণকারীকে খুঁজে বের করব nt

পরিবর্তে স্পষ্টতার জন্য যান না কেন:

$ for X in {a,b,c}; do echo $X; done

এমনকি আপনি পুরো-হোগে যেতে পারেন এবং বেশ কয়েকটি নিউলাইন তৈরি করতে পারেন এবং এটিকে কিছুটা ইনডেন্ট করতে পারেন যাতে আপনি কী করতে চেষ্টা করছেন তা সর্বদা বুঝতে সক্ষম হবেন।


4
@ পেথ - আমি ধরে নিচ্ছি এটি একটি সরল উদাহরণ। এটি যদি তালিকার মতো সত্যই সহজ হয় তবে আপনি ঠিক বলেছেন। যদি এটির মতো আরও কিছু থাকে file-{r,b,g}{m,n,o}{x,y.z}.fooতবে সমস্ত 27 মান গণনার চেয়ে সংক্ষিপ্ত ফর্মটি ব্যবহার করা ভাল।
অযৌক্তিক

@ পেথ - আমি ভেবেছিলাম এটি একটি ভাল ফলোআপ প্রশ্ন was
অযৌক্তিক

আমি এটি দীর্ঘ সময়ের জন্য জানতে চেয়েছি, ধন্যবাদ! :)
সাইরেক্স

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

আমি একাধিক গিট শাখা পরিষ্কার করতে এটি ব্যবহার করেছি:eval git branch -d \{ branch-a, branch-b }\;
কিট

3

মার্ক মানের নির্বাচিত উত্তরের ভিত্তিতে আমি এই উদাহরণটি আরও প্রকাশ করতে পেরেছি, যা দুর্দান্ত কাজ করে:

$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak

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

উপরের আউটপুটটি প্রত্যাশার মতো প্রদর্শিত হয়েছিল, আমি তখন নিম্নলিখিত কমান্ডটি চালাতে সক্ষম হয়েছি:

$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak  category_32.properties.bak  category_33.properties.bak

তার মূল উত্তরের জন্য মার্ককে অনেক ধন্যবাদ। আপনি যদি উত্তরটি পছন্দ করেন তবে তার উত্তরটি আমাকে কী করতে দেয় :-)


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