আইএফএস নাল আনসেট আইএফএসের মতো নয়?


13

আমি এখানে একটি দুর্দান্ত প্রশ্ন পড়লাম আইএফএস বোঝার জন্য । আমি অবাক হয়েছিলাম কারণ উত্তর এবং মন্তব্যগুলি পসিআইএক্সের উদ্ধৃতি দিয়েছিল যে আইএফএস = আনসেটিং আইএফএসের মতো নয়। আপনি যদি আইএফএস আনসেট করেন তবে দৃশ্যত ডিফল্ট মান ব্যবহৃত হবে। আপনি যদি এর পরিবর্তে আইএফএস শূন্য করেন তবে কোনও বিভাজন নেই। আমি জানতাম যে আমি এটির চেয়ে আলাদা গ্রহণ করতে দেখেছি এবং এটি আমার বুকমার্কগুলিতে পেয়েছি:

বোর্ন শেল প্রোগ্রামিং

$ IFS

আপনার স্ক্রিপ্টের প্রথম বক্তব্যটি হওয়া উচিত

IFS =

যা ইনপুট ফিল্ড বিভাজকটিকে তার ডিফল্ট মানটিতে পুনরায় সেট করে। অন্যথায়, আপনি ব্যবহারকারীর কাছ থেকে inherit আইএফএসের উত্তরাধিকারী হন, যিনি আপনার পার্থক্যের চেয়ে আলাদাভাবে আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা পোশাক তৈরি করতে এবং অদ্ভুত আচরণ প্রেরণার জন্য এটি সম্ভবত কিছু উদ্ভট মানতে সেট করেছেন।

তাহলে কি কিছুক্ষণ আগে সত্য ছিল নাকি লেখক কি ঠিক ভুল?

উত্তর:


20

স্ট্যাক এক্সচেঞ্জ এ আপনি যে উত্তরগুলি পেয়েছেন তা সঠিক এবং এই টিউটোরিয়ালটি ভুল। আপনি নিজের দ্বারা পরীক্ষা করতে পারেন বা এটি স্ট্যান্ডার্ডে সন্ধান করতে পারেন । একটি আনসেট IFSএটিকে স্থান-ট্যাব-নতুন লাইনের ডিফল্ট মান হিসাবে সেট করার সমতুল্য হয়, যখন একটি খালি IFSকার্যকরভাবে ক্ষেত্র বিভাজন বন্ধ করে দেয়।

Historicalতিহাসিক বাস্তবায়ন সম্পর্কে আপনি আইএফএস-এ সুইভেন মাসচেকের পৃষ্ঠার সাথে পরামর্শ করতে পারেন । কয়েকটি historicalতিহাসিক শেল পছন্দ করেনি unset IFS, এবং ksh এর একটি অতি পুরানো সংস্করণ এটিকে খালি মনে করেছিল IFSতবে সমস্ত আধুনিক শেল এবং বেশিরভাগ পুরাতন শাঁসগুলি IFSডিফল্ট মানের মতো একটি আনসেটকে বিবেচনা করে ।

আপনি IFS=যদি ফিল্ড বিভাজন বন্ধ না করতে চান তবে আপনার স্ক্রিপ্টটি শুরু করা উচিত নয় (যা যুক্তিসঙ্গত সিদ্ধান্ত হতে পারে - তবে মনে রাখবেন যে গ্লোব্বিং এড়াতে আপনাকে এখনও বিকল্পগুলির চারপাশে ডাবল কোট লাগানো দরকার, যদি আপনি এটি বন্ধ set -fনা করেন)। ডিফল্ট মানটি পুনরায় সেট করতে, ব্যবহার করুন unset IFS। এটি কোনও স্ক্রিপ্টের শুরুতে কার্যকর কিনা তা বিতর্কযোগ্য; ডায়গির মতো প্রচুর অন্যান্য খারাপ জিনিস রয়েছে PATHযা কলকারী আপনার স্ক্রিপ্টটি ভুল করতে করতে পারে।

এই টিউটোরিয়ালটি পুনরায় সেট করার পরামর্শ দেয় PATH। এটি সাধারণত খারাপ পরামর্শ। বেশিরভাগ ক্ষেত্রে, আপনি সঠিক অনুসন্ধানের পথটি কী তা অনুমান করতে পারবেন না, তবে ব্যবহারকারী জানেন। আপনি কীভাবে জানবেন যে কোনও প্রাচীন ইউনিক্সে যেগুলি বগী রয়েছে সেখানে ইউটিলিটিগুলির বাগ-ফিক্সড সংস্করণ রয়েছে /usr/local/binবা /home/bob/binরয়েছে /usr/bin? আপনি কি সব যুক্তি এম্বেড করতে চান তা নির্ধারণ করার জন্য যে /usr/xpg6/binসামনে রাখা উচিত /bin? আপনি কোন পদে চান /usr/gnu/bin? আপনার স্ক্রিপ্ট কোনও নির্দিষ্ট সিস্টেমকে লক্ষ্য না করা পর্যন্ত PATH পুনরায় সেট করবেন না।

আমি এই টিউটোরিয়ালটি পড়িনি, তবে আমি একটি জিনিস যাচাই করেছি: এটি আপনাকে ভেরিয়েবল বিকল্প এবং কমান্ড বিকল্পের পরিবর্তে সর্বদা ডাবল উদ্ধৃতি প্রদানের শুরু থেকেই বলে না tell সুতরাং আমি এই টিউটোরিয়ালটি ভাল বলে মনে করি না।


unset IFSফিল্ড-বিভাজন পুনরায় সেট করা সত্ত্বেও ব্যাশে আইএফএস তার ডিফল্ট মানটিতে রিসেট করে না।
মেলাব

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