'আইএফএস' কী?


উত্তর:


17

IFSএর জন্য দাঁড়িয়েছে - এটি এমন একটি চরিত্র যা ক্ষেত্রগুলি পৃথক করে। আপনি পোস্ট করেছেন উদাহরণে, এটি নতুন লাইন চরিত্রে সেট করা হয়েছে ( ); সুতরাং আপনি এটি সেট করার পরে, পাঠ্য লাইন এক এক করে প্রক্রিয়াকরণ করবে। এই উদাহরণে, আপনি (আপনার ইনপুট ফাইলে থাকা কোনও অক্ষরের কাছে) এর মান পরিবর্তন করতে পারেন এবং পাঠ্য কীভাবে বিভক্ত হবে তা পরীক্ষা করতে পারেন।Input Internal Field Separator\nforIFS

বিটিডাব্লু, আপনি যে উত্তরটি পোস্ট করেছেন দ্বিতীয় সমাধানটি হ'ল এটি প্রস্তাবিত ...

@ জেসনওয়ারিয়ান যেমন খেয়াল করেছেন, তা কিন্তু Inputনয় Internal। নাম Inputএসেছিল awkযা থেকে এছাড়াও আছে OFS- Output Field Separator


1
নোট করুন যে আইএফএস আউটপুট জন্য পরামিতি একত্রিত করতে ব্যবহৃত হয়। বাশ ম্যান পৃষ্ঠা থেকে: "ডাবল উদ্ধৃতিতে যখন প্রসারণ ঘটে তখন এটি আইএফএস বিশেষ ভেরিয়েবলের প্রথম অক্ষর দ্বারা পৃথক পৃথক প্রতিটি প্যারামিটারের মান সহ একটি শব্দে প্রসারিত হয়।"
এরিক

একথাও অনুধাবন করতে হবে যে Sছিল বিভাজক বোর্ন শেল যেখানে এটি থেকে সম্ভূত হবে। কর্ন শেল এবং অন্যান্য বোর্নের মতো শেল যেটি এখন দ্বারা নির্দিষ্ট করা হয়েছে POSIXতাতে Sডিলিমিটারের জন্য রয়েছে (কেবলমাত্র আপনার কল্পনাটি কিছুটা প্রসারিত করুন) A::B:উদাহরণস্বরূপ "এ", "" এবং "বি" তে বিভক্ত (কোনও অতিরিক্ত নেই) "")। যে থেকে আলাদা awk'র FSবা sএর প্যারামিটার সম্প্রসারণ পতাকা zsh
স্টাফেন চেজেলাস

27

IFSলুপিংয়ের সাথে সরাসরি সম্পর্কিত নয়, এটি শব্দ বিভাজনের সাথে সম্পর্কিত। IFSকমান্ড থেকে আউটপুট কীভাবে লুপটি পুনরায় পুনরুক্ত হয় তা টুকরো টুকরো হয়ে যায় তা পরোক্ষভাবে নির্ধারণ করে।

যখন আপনার কোনও সুরক্ষিত পরিবর্তনশীল বিকল্প $fooবা কমান্ড প্রতিস্থাপন থাকে $(foo), তখন দুটি ক্ষেত্রে থাকে:

  • যদি প্রসঙ্গটি একটি একক শব্দের প্রত্যাশা করে, উদাহরণস্বরূপ যখন প্রতিস্থাপনটি ডাবল কোট "$foo"বা ভেরিয়েবল অ্যাসাইনমেন্টের মধ্যে থাকে x=$foo, তবে প্রতিস্থাপনের ফলে প্রাপ্ত স্ট্রিংটি যেমন হয় তেমন ব্যবহৃত হয়।
  • যদি প্রসঙ্গটি একাধিক শব্দের প্রত্যাশা করে, যা বেশিরভাগ সময় কেস হয়, তবে ফলস্বরূপ স্ট্রিংয়ে আরও দুটি বিস্তৃতি সম্পাদিত হয়:
    • স্ট্রিং শব্দের মধ্যে বিভক্ত । যে অক্ষর উপস্থিত হয় $IFSতাকে শব্দ বিভাজক হিসাবে বিবেচনা করা হয়। উদাহরণস্বরূপ IFS=":"; foo="12:34::78"; echo $fooপ্রিন্টগুলি 12 34 ​ 78(এর মধ্যে দুটি ফাঁকা জায়গা রয়েছে 34এবং 78যেহেতু খালি শব্দ রয়েছে)।
    • প্রতিটি শব্দকে গ্লোব প্যাটার্ন হিসাবে বিবেচনা করা হয় এবং ফাইলের নামের তালিকায় প্রসারিত হয় । উদাহরণস্বরূপ, foo="*"; echo $fooবর্তমান ডিরেক্টরিতে ফাইলগুলির তালিকা মুদ্রণ করে।

লুপগুলির জন্য, অন্যান্য অন্যান্য প্রসঙ্গে যেমন শব্দের একটি তালিকা আশা করে। সুতরাং

for x in $(foo); do 

$(foo)শব্দগুলিতে বিভক্ত হয় এবং প্রতিটি শব্দকে গ্লোব প্যাটার্ন হিসাবে বিবেচনা করে। এর ডিফল্ট মান IFSহ'ল স্থান, ট্যাব এবং নিউলাইন , সুতরাং যদি fooদুটি লাইন প্রিন্ট করে hello worldএবং howdyতারপরে লুপের বডিটি কার্যকর করা হয় x=helloতবে x=worldএবং x=howdy। যদি IFSকেবলমাত্র একটি নতুন লাইন ধারণ করে স্পষ্টভাবে পরিবর্তিত হয় তবে লুপটি কার্যকর হয় hello worldএবং এর জন্য howdy। যদি IFSহতে পরিবর্তিত হয় o, তারপর লুপ জন্য মৃত্যুদন্ড কার্যকর করা হয় hell, ​ w, rld​␤h(যেখানে ​␤একটি newline চরিত্র) এবং wdy


কেন আপনি "পরোক্ষভাবে" উল্লেখ করেছেন "IFS indirectly determines how ..."?
সু

1
@ нιηsнιη IFS(সরাসরি) নির্ধারণ করে যে কীভাবে কমান্ড প্রতিস্থাপনের আউটপুট বিভক্ত হয়, যা পরে (অপ্রত্যক্ষভাবে) নির্ধারণ করে যে লুপটি কী আউট হবে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

5

থেকে man bash

আইএফএস অভ্যন্তরীণ ক্ষেত্র বিভাজক যা প্রসারণের পরে শব্দ বিভাজনের জন্য এবং পঠিত বিল্টিন কমান্ডের সাহায্যে শব্দের মধ্যে লাইনগুলি বিভক্ত করতে ব্যবহৃত হয়। ডিফল্ট মান হ'ল "<স্পেস> <ট্যাব> <নিউলাইন>"।

এটি বাশের অভ্যন্তরীণ ভেরিয়েবলগুলির মধ্যে একটি। এটি নির্ধারণ করে যে বাশ ক্ষেত্র বা শব্দের সীমা কীভাবে স্বীকৃতি দেয়, যখন এটি চরিত্রের স্ট্রিংয়ের ব্যাখ্যা করে।

এটি শ্বেতস্পেসে (স্থান, ট্যাব এবং নতুন লাইন) ডিফল্ট অবস্থায়, এটি পরিবর্তিত হতে পারে, উদাহরণস্বরূপ, কমা-বিচ্ছিন্ন ডেটা ফাইলকে পার্স করতে।

http://tldp.org/LDP/abs/html/internalvariables.html


0

পূর্ববর্তী মহান উত্তর ছাড়াও, আমাকে শুধু যোগ যে দিন IFS সঙ্গে একযোগে সহজ ক্ষেত্রেই দক্ষ ও পোর্টেবল পার্সিং জন্য খুব উপকারী সেট । দক্ষ, কারণ গ্রিপ বা শেডের মতো সাবশেল এবং স্পোনিং সরঞ্জামগুলি ব্যবহার করা এড়ানো যায়:

resolutions="640x480,320x240"
xIFS=$IFS
IFS=','
for res in $resolutions; do
    xxIFS=$IFS
    IFS='x'
    set -- $res
    width=$1
    height=$2
    # handle width and height
    IFS=$xxIFS
done;
IFS=$xIFS

শুধু মনে রাখবেন যে আমরা সঞ্চয় করি এবং পুনরুদ্ধার করতে পূর্ববর্তী মান প্রয়োজন IFS স্ক্রিপ্ট অন্যান্য অংশে অবাঞ্ছিত breakages এড়ানো।

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