আমি ব্রেস প্রসারণ কী তা বুঝতে পারি, তবে এটি কীভাবে সেরা ব্যবহার করা যায় তা আমি জানি না।
আপনি কখন এটি ব্যবহার করবেন?
আপনার নিজের টিপস থাকলে দয়া করে আমাকে কিছু সুবিধাজনক এবং উল্লেখযোগ্য উদাহরণ শিখিয়ে দিন।
আমি ব্রেস প্রসারণ কী তা বুঝতে পারি, তবে এটি কীভাবে সেরা ব্যবহার করা যায় তা আমি জানি না।
আপনি কখন এটি ব্যবহার করবেন?
আপনার নিজের টিপস থাকলে দয়া করে আমাকে কিছু সুবিধাজনক এবং উল্লেখযোগ্য উদাহরণ শিখিয়ে দিন।
উত্তর:
আপনার দীর্ঘ পথের নাম থাকলে বন্ধনী সম্প্রসারণ খুব কার্যকর। আমি একটি ফাইল ব্যাকআপ করার দ্রুত উপায় হিসাবে এটি ব্যবহার করি :
cp /a/really/long/path/to/some/file.txt{,.bak}
অনুলিপি /a/really/long/path/to/some/file.txt
করা হবে/a/really/long/path/to/some/file.txt.bak
আপনি এটি একটি ক্রম ব্যবহার করতে পারেন । ওয়েব থেকে প্রচুর পৃষ্ঠা ডাউনলোড করার জন্য আমি একবার এটি করেছি:
wget http://domain.com/book/page{1..5}.html
অথবা
for i in {1..100}
do
#do something 100 times
done
program
: তিনটি শব্দের পায় "-f file1" "-f file2" "-f file3"
, 6 পরিবর্তে: "-f" "file1" "-f" "file2" "-f" "file3"
।
for
লুপে ব্যবহারের জন্য সম্প্রসারণ ব্যবহার করা কিছুটা অর্থহীন, যেহেতু আপনি লিখতে পারেন for ((i=1; i<=100; i++))
এবং এটি আরও দক্ষ।
বৃহত ডিরেক্টরি স্ট্রাকচারগুলি তৈরি করার সময় ব্রেস সম্প্রসারণ খুব কার্যকর হয়:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
এটি আপনাকে দেবে
find dir1 -type d
dir1
dir1/subdir1
dir1/subdir1/subsubdir1
dir1/subdir1/subsubdir2
dir1/subdir2
dir1/subdir2/subsubdir1
dir1/subdir2/subsubdir2
এমনকি আপনি আরও এক ধাপ এগিয়ে গিয়ে ব্রেস সম্প্রসারণে ব্রেস প্রসারিত করতে পারেন:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
এটি আপনাকে উপরের উদাহরণের মতো একই ডিরেক্টরি কাঠামো দেবে।
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) আসলে কোনও উদ্দেশ্য করে না। আপনি শুধুমাত্র এই কাজ করতে পারে: mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
।
subdir1
এবং subdir2
অ-আক্ষরিক অর্থে এটি একটি উদ্দেশ্য হিসাবে কাজ করে । প্রতিস্থাপন subdir1
সঙ্গে cat
এবং subdir2
সঙ্গে dog
উদাহরণস্বরূপ।
আমি এটি ব্যবহারের সময় বিকাশের সময় টেস্ট আউটপুটটিকে কাঙ্ক্ষিত টেস্ট আউটপুটটির সাথে তুলনা করতে ব্যবহার করি। যদি পরীক্ষা # 41 ব্যর্থ হয় তবে সহজেই পরীক্ষা আউটপুট (ফাইল টেস্টে আউটপুট / 041) এবং কাঙ্ক্ষিত আউটপুট (ফাইল টেস্টে আউট / 041 তে) এর মধ্যে পার্থক্যটি দেখতে পারা সহজ:
$ diff tests.{out,output}/041
আমার জন্য কিছু ঘন ঘন কেস হ'ল:
নতুন নামকরণের জন্য:
mv myText.{txt,tex}
অথবা
mv myText.tex{,.old}
অথবা
cp myText.tex{,.backup}
(যদিও এটি সর্বশেষ 2 টি কাজের জন্য সংস্করণ নিয়ন্ত্রণ ব্যবহার করা কম অগোছালো))
তুলনা করার জন্য (ইতিমধ্যে উল্লিখিত):
diff path{1,2}/a.txt
এখানে বেশ কয়েকটি দুর্দান্ত উত্তর রয়েছে তবে ব্রেস প্রসারণ কখন ব্যবহার করবেন না সেগুলির মধ্যে কেউই উল্লেখ করেন না । অন্যান্য উত্তরদাতাদের মতো, আমি কমান্ড লাইনেও বেশ কিছুটা ব্যবহার করি expansion আমি স্মার্ট শেলটি আশা করতে পারি বলে আমি এটি আমার এলিয়াস এবং ফাংশনগুলিতেও ব্যবহার করি।
আমি না আমার শেল স্ক্রিপ্ট-এ এটি ব্যবহার (যদি না সেখানে অন্য কোন কারণে স্ক্রিপ্ট ব্যাশ বা zsh হওয়া উচিত যে, যদিও সেই ক্ষেত্রে, এটা ভাল মত একটি "বাস্তব" স্ক্রিপ্টিং ভাষা আপগ্রেড করার perl
বা python
)। ব্রেস এক্সপেনশন পোর্টেবল নয় কারণ এটি পসিক্স শেল স্ট্যান্ডার্ডে নেই। এমনকি যদি এটি আপনার /bin/sh
- শেবাং এড শেল স্ক্রিপ্টগুলিতে কাজ করে তবে এটি বেশি স্ট্রিপড /bin/sh
শেল (উদাঃ dash
) সহ সিস্টেমে কাজ করবে না ।
একক অঙ্কের পার্থক্যের ক্ষেত্রে আপনার ব্রেস সম্প্রসারণের প্রয়োজন হবে না; একটি চরিত্র শ্রেণি যথেষ্ট হবে:
Bashism:
diff file{1,2}
সুবহ:
diff file[12]
file{1,2}
সর্বদা প্রসারিত হবে file1 file2
, যখন file[12]
কেবল বিদ্যমান ফাইলের নামগুলিতে প্রসারিত হবে : অর্থাত্ file1
উপস্থিত থাকলেও file2
তা না থাকলে কেবলমাত্র file[12]
প্রসারিত হয় file1
। []
সম্প্রসারণ সত্যিই একটি সীমিত সংস্করণ ?
সম্প্রসারণ (এবং তাদের "পথনাম প্রসারণও" বলা হয়)।
program -f file1 -f file2 -f file3
, আপনি করতে পারেনprogram "-f file"{1..3}