জাস্টিন কোয়ান্টার উত্তর সম্পর্কে তার প্রথম মন্তব্যে তার প্রশ্নটি স্পষ্ট করেছিলেন। তিনি read
(বা অন্য কোনও গতিশীল উপায়ে) ব্যবহার করে একটি পাঠ্য লাইনে পড়ছেন এবং টিল্ডটি প্রসারিত করতে চান।
প্রশ্নটি হয়ে যায় "আপনি কোনও ভেরিয়েবলের সামগ্রীতে টিলডে সম্প্রসারণ কীভাবে করবেন?"
সাধারণ পদ্ধতিটি ব্যবহার করা হয় eval
তবে এটি >
ভেরিয়েবলের কিছু গুরুত্বপূর্ণ ক্যাভ্যাটস, স্পেস এবং আউটপুট পুনর্নির্দেশ ( ) সহ আসে । নিম্নলিখিতটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে:
read -p "Provide the destination directory: " DESTINATION
if [ ! -d "`eval echo ${DESTINATION//>}`" ]; then
echo "'$DESTINATION' does not exist." >&2;
exit 1;
fi
নিম্নলিখিত প্রতিটি ইনপুট দিয়ে এটি ব্যবহার করে দেখুন:
~
~/existing_dir
~/existing dir with spaces
~/nonexistant_dir
~/nonexistant dir with spaces
~/string containing > redirection
~/string containing > redirection > again and >> again
ব্যাখ্যা
${mypath//>}
আউট রেখাচিত্রমালা >
অক্ষর সময় একটি ফাইল পরাস্ত পারে eval
।
eval echo ...
কি প্রকৃত টিল্ড সম্প্রসারণ নেই
- এর আশেপাশের ডাবল-কোটগুলি
eval
স্পেস সহ ফাইলের নামের জন্য।
এর পরিপূরক হিসাবে, আপনি -e
পড়ার বিকল্পটি যুক্ত করে ইউএক্সকে উন্নত করতে পারেন:
read -p "Provide the destination directory: " -e DESTINATION
এখন যখন ব্যবহারকারী টিলডে টাইপ করে এবং ট্যাবে হিট করে এটি প্রসারিত হবে। এই পদ্ধতির উপরের ইওল পদ্ধতির প্রতিস্থাপন হয় না , তবে, সম্প্রসারণ কেবল তখনই ঘটে যখন ব্যবহারকারী ট্যাবকে হিট করে। যদি সে কেবল ~ / foo টাইপ করে এবং হিট প্রবেশ করে তবে এটি টিল্ড হিসাবে থাকবে।
আরো দেখুন:
cd "~/Desktop"
আপনিও একটি ত্রুটি পান। এটি ভেরিয়েবল হিসাবে উদ্ধৃত বা সংরক্ষণ করতে হবে (উদ্ধৃতি ব্যতীত)। উদাহরণস্বরূপ,a=~/Desktop; cd $a;
কাজ করে তবে সার্ভারসফল্টa="~/Desktop"; cd Desktop;