কেন এটি লুপের জন্য খোলসের মধ্যে কাজ করে তবে নিজের দ্বারা নয়


1

কেন এই কাজ করে

for X in A* ; do cp $X/output.txt output/$X.txt ; done

কিন্তু এই না

cp A*/output.txt output/A*.txt

A1, A2, A3, A4 ইত্যাদি একাধিক ফোল্ডার থেকে আউটপুট.টিএসটিএফ ফাইলটি অনুলিপি করার জন্য "আউটপুট" নামে একটি সম্মিলিত ফোল্ডারে প্রতি পাঠ্য ফাইলটি যে ফোল্ডারটি এসেছে সেটির নাম দেয়।


আমি কল্পনা করবো কারণ সিপি এর মধ্যে নেই এবং নিজেই পুনরাবৃত্তি করে না, এবং যেহেতু এ * বাম দিকে একটি ওয়াইল্ডকার্ড, তবে ডানদিকে একটি হিসাবে ধরা যায় না (কোনও সমান্তরাল গণনা নেই, এবং ওয়াইল্ডকার্ডগুলি কেবল ইনপুট জন্য কাজ করে, আউটপুট নয়, যেখানে পুরোপুরি উদ্বেগ রয়েছে) সুতরাং এটি আক্ষরিক 'এ *' হয়ে যায়, এ 1, এ 2 ইত্যাদি নয়। কিছু লুপিং কনস্ট্রাক্টের প্রয়োজন হয় এ * এর উভয় দৃষ্টিকোণকে প্রসারিত করার জন্য, এবং প্রতিটি পুনরাবৃত্তির জন্য সেগুলিকে সিঙ্কে রাখুন । এক্স একটি পরিবর্তনশীল যা প্রতিটি লুপে আপডেট হয়। এ * হয় না।
ফ্র্যাঙ্ক থমাস

উত্তর:


5

কারণ শেলটি কমান্ডটি প্রেরণের আগে A*.txtঅংশটি একাধিক পাথে প্রসারিত করে ( cpএই ক্ষেত্রে)।

এর অর্থ হ'ল প্রথম ক্ষেত্রে, আপনার কাছে যদি A1.txt, A2.txt, A3.txt এবং A4.txt এবং ডিরেক্টরিগুলি A1, A2, A3 এবং A4 নামের ফাইলগুলি থাকে তবে প্রতিটি আউটপুট.txt রয়েছে এটি এর মতো কিছুতে প্রসারিত হয় :

for X in A1.txt A2.txt A3.txt A4.txt ; do cp $X/output.txt output/$X.txt ; done

এবং দ্বিতীয় ক্ষেত্রে এটি প্রসারিত হয়:

cp A1/output.txt A2/output.txt A3/output.txt A4/output.txt output/A*.txt

যেখানে output/A*.txtঅংশ বা আছে কিনা কিছু বিদ্যমান নির্ভর করে প্রসারিত পারে আবার নাও পারে outputউল্লিখিত glob মিলে ডিরেক্টরি। এটি যদি হয় তবে তা আরও খারাপ হয়ে যায়, যেমন:

cp A1/output.txt A2/output.txt A3/output.txt A4/output.txt output/A8.txt output/A9.txt

যেহেতু cpপ্রদত্ত একাধিক উত্স ফাইলগুলি শেষে একটি গন্তব্য ডিরেক্টরি চায় , সুতরাং এটি কীভাবে পরিচালনা করতে হয় তা জানে না এবং কেবল তার হাত উপরে ছুঁড়ে দেয় এবং পরিবর্তে আপনাকে একটি ত্রুটি দেয়।


0

কারণটি হ'ল, যদি এখানে দুটিরও বেশি আর্গুমেন্ট থাকে cpতবে শেষটি অবশ্যই একটি ডিরেক্টরি হতে হবেCP ম্যান পৃষ্ঠা পদ বলে:

সংক্ষিপ্তসার

সিপি [বিকল্প] ... [-T] উত্স DEST

সিপি [বিকল্প] ... উত্স ... প্রত্যক্ষ

সিপি [বিকল্প] ... - প্রত্যক্ষ উত্স ...

বর্ণনা

DEST, বা একাধিক উত্স (গুলি) কে DIRECTORY তে অনুলিপি করুন।

আপনি যে আদেশ লিখেছিলেন,

  cp file1 file2 file3 file4

মানে বোঝানো হয়েছিল

 cp file1 file3; cp file2 file4

কিন্তু উপরের কারণে এটি হয় না। ফর লুপ পরিবর্তে ঠিক উপরের 2 টি স্টেটমেন্ট তৈরি করে যা আপনি সত্যই চান।

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