আপনি সংরক্ষণ করুন এবং প্রয়োজন অনুসারে আইএফএসে বরাদ্দ করতে পারেন। এতে করে কোনও ভুল নেই। আপনার অ্যারে অ্যাসাইনমেন্ট উদাহরণের মতো অস্থায়ী, তাত্পর্যপূর্ণ পরিবর্তন পরে পুনরুদ্ধারের জন্য এর মান সংরক্ষণ করা অস্বাভাবিক কিছু নয়।
@ লুলুয়া আপনার প্রশ্নের মন্তব্যে যেমন উল্লেখ করেছেন, কেবল আইএফএস সেট না করা ডিফল্ট আচরণ পুনরুদ্ধার করবে, এটি একটি স্পেস-ট্যাব-নিউলাইন বরাদ্দ করার সমতুল্য।
এটি কীভাবে পরিষ্কারভাবে আইএফএস সেট / সেট না করা আরও সমস্যাযুক্ত হতে পারে তা বিবেচনা করার মতো।
পসিক্স 2013 সংস্করণ থেকে 2.5.3 শেল ভেরিয়েবলগুলি :
বাস্তবায়নের ফলে পরিবেশে আইএফএসের মান বা পরিবেশের থেকে আইএফএসের অনুপস্থিতি উপেক্ষা করা যেতে পারে শেলটি চালিত হওয়ার সময়, এই ক্ষেত্রে শেলটি আইফএসকে <space> <tab> <নিউলাইন> সেট করা হয় ।
একটি পসিক্স-সম্মতিযুক্ত, চালিত শেল তার পরিবেশ থেকে আইএফএসের উত্তরাধিকারী হতে পারে বা নাও পেতে পারে। এর থেকে নিম্নলিখিত:
- একটি পোর্টেবল স্ক্রিপ্ট নির্ভরযোগ্যভাবে পরিবেশের মাধ্যমে আইএফএসের উত্তরাধিকারী হতে পারে না।
- একটি স্ক্রিপ্ট যা কেবলমাত্র ডিফল্ট বিভাজনমূলক আচরণ (বা ক্ষেত্রে যোগদানের ক্ষেত্রে
"$*"
) ব্যবহার করতে চায় তবে পরিবেশের অনুপ্রবেশের বিরুদ্ধে নিজেকে রক্ষা করতে আইএফএসকে স্পষ্টভাবে সেট / আনসেট করতে হবে যা পরিবেশ থেকে আইএফএস শুরু করে।
এনবি এটি বোঝার জন্য গুরুত্বপূর্ণ যে এই আলোচনার জন্য "আহ্বান" শব্দের একটি বিশেষ অর্থ রয়েছে। একটি শেল কেবল তখনই ডাকা হয় যখন এটির নাম (একটি #!/path/to/shell
শেবাং সহ ) ব্যবহার করে স্পষ্টভাবে বলা হয় । একটি সাব- শেল - যেমন তৈরি করা হতে পারে $(...)
বা cmd1 || cmd2 &
- এটি একটি চালিত শেল নয় এবং এর আইএফএস (এর বেশিরভাগ এক্সিকিউটিভ পরিবেশের সাথে) তার পিতামাতার অনুরূপ। একটি চালিত শেল $
তার পিডের মান সেট করে , যখন সাব-শেলগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয়।
এটি নিছক পেডেন্টিক ডিসকুইজেশন নয়; এই এলাকায় প্রকৃত বিচ্যুতি আছে। এখানে একটি সংক্ষিপ্ত স্ক্রিপ্ট যা বিভিন্ন শেল ব্যবহার করে দৃশ্যের পরীক্ষা করে। এটি একটি পরিবর্তিত আইএফএস (সেট করা :
) একটি চালিত শেলকে রফতানি করে যা তার ডিফল্ট আইএফএস প্রিন্ট করে।
$ cat export-IFS.sh
export IFS=:
for sh in bash ksh93 mksh dash busybox:sh; do
printf '\n%s\n' "$sh"
$sh -c 'printf %s "$IFS"' | hexdump -C
done
আইএফএসকে সাধারণত রফতানির জন্য চিহ্নিত করা হয় না, তবে এটি যদি হয় তবে খেয়াল করুন যে কীভাবে ব্যাশ, ksh93, এবং ম্যাক্স তাদের পরিবেশের দিকে অগ্রাহ্য করবেন IFS=:
, যখন ড্যাশ এবং ব্যস্তবক্স এটি সম্মান করে।
$ sh export-IFS.sh
bash
00000000 20 09 0a | ..|
00000003
ksh93
00000000 20 09 0a | ..|
00000003
mksh
00000000 20 09 0a | ..|
00000003
dash
00000000 3a |:|
00000001
busybox:sh
00000000 3a |:|
00000001
কিছু সংস্করণ তথ্য:
bash: GNU bash, version 4.3.11(1)-release
ksh93: sh (AT&T Research) 93u+ 2012-08-01
mksh: KSH_VERSION='@(#)MIRBSD KSH R46 2013/05/02'
dash: 0.5.7
busybox: BusyBox v1.21.1
যদিও বাশ, ksh93, এবং mksh পরিবেশ থেকে আইএফএস আরম্ভ করে না, তারা তাদের পরিবর্তিত আইএফএস পুনরায় রফতানি করে।
যদি আপনার কোনও কারণে পরিবেশের মাধ্যমে আইএফএস পাসপোর্ট করার প্রয়োজন হয় তবে আপনি নিজেই আইএফএস ব্যবহার করে এটি করতে পারবেন না; আপনাকে আলাদা ভেরিয়েবলের মান নির্ধারণ করতে হবে এবং রফতানির জন্য সেই পরিবর্তনশীলটি চিহ্নিত করতে হবে। তারপরে বাচ্চাদের তাদের আইএফএসে স্পষ্টভাবে সেই মান নির্ধারণ করতে হবে।