বা আরও সাধারণভাবে, আমি কীভাবে কোনও বাশ এনভায়রনমেন্ট ভেরিয়েবলের কোলন-বিচ্ছিন্ন তালিকা থেকে কোনও আইটেম সরিয়ে ফেলব?
আমি ভেবেছিলাম যে আমি বেশ কয়েক বছর আগে এটি করার সহজ উপায়টি দেখেছি, ব্যাশ ভেরিয়েবল প্রসারের আরও উন্নত রূপগুলি ব্যবহার করে, তবে যদি তাই হয় তবে আমি এটির ট্র্যাক হারিয়ে ফেলেছি। গুগলের একটি দ্রুত অনুসন্ধান আশ্চর্যজনকভাবে কয়েকটি প্রাসঙ্গিক ফলাফল প্রকাশ করেছে এবং এমন কোনও কিছুই নয় যে আমি "সরল" বা "মার্জিত" বলব। উদাহরণস্বরূপ, দু'টি পদ্ধতি যথাক্রমে সেড এবং অ্যাডকে ব্যবহার করুন:
PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH)
কোন কিছুর সোজা অস্তিত্ব নেই? বাশে বিভক্ত () ফাংশনের সাথে সাদৃশ্যপূর্ণ কিছু আছে কি?
আপডেট:
দেখে মনে হচ্ছে আমার উদ্দেশ্যমূলক-অস্পষ্ট প্রশ্নের জন্য আমাকে ক্ষমা চাইতে হবে; ভাল আলোচনা আলোচনার চেয়ে আমি নির্দিষ্ট ব্যবহার-মামলা সমাধানে আগ্রহী নই was ভাগ্যক্রমে, আমি পেয়েছি!
এখানে খুব চালাক কিছু কৌশল রয়েছে। শেষ পর্যন্ত, আমি আমার সরঞ্জামবক্সে নিম্নলিখিত তিনটি ফাংশন যুক্ত করেছি। ম্যাজিকটি পথ_ম্রোভে ঘটে যা মূলত মার্টিন ইয়র্ক এর awkআরএস ভেরিয়েবলের চালাক ব্যবহারের উপর ভিত্তি করে ।
path_append () { path_remove $1; export PATH="$PATH:$1"; }
path_prepend () { path_remove $1; export PATH="$1:$PATH"; }
path_remove () { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
সেখানে কেবলমাত্র আসল ক্রাফ্টটি হ'ল ট্রেলিং কোলনটি sedসরিয়ে ফেলতে হবে। মার্টিনের বাকী সমাধানটি কতটা সোজাসুজি বিবেচনা করে দেখুন, যদিও আমি এটির সাথে বাঁচতে বেশ ইচ্ছুক!
সম্পর্কিত প্রশ্ন: আমি কীভাবে শেল স্ক্রিপ্টগুলিতে AT PATH উপাদানগুলি ব্যবহার করব?
WORK=`echo -n ${1} | awk -v RS=: -v ORS=: '$0 != "'${3}'"' | sed 's/:$//'`; eval "export ${2}=${WORK}"তবে আপনাকে অবশ্যই এটিfunc $VAR VAR pattern(@ মার্টিন-ইয়র্ক এবং @ অ্যান্ড্রু-আইলেটটের উপর ভিত্তি করে) হিসাবে কল করতে হবে