$ (Pwd) বা $ PWD ব্যবহার করা কি ভাল?


35

আমি BASEDIR=$(pwd)একটি স্ক্রিপ্ট মুখোমুখি ।

ব্যবহার ব্যতীত কোনও সুবিধা বা অসুবিধাগুলি রয়েছে BASEDIR="$PWD", সম্ভবত এগুলি, $PWDওভাররাইট করা যেতে পারে?



@ স্টাফেন চ্যাজেলাস খুব আকর্ষণীয় লেখার জন্য। আমি কেবল অর্ধেক পথ পেরিয়ে যাব এবং চালিয়ে যাব, তবে যতদূর আমি এটি বুঝতে পেরেছি এটি ব্যবহার করা ভাল $(pwd), কারণ $PWDনির্দিষ্ট পরিস্থিতিতে পুরানো হয়ে যেতে পারে।
Minix

2
কেবল কয়েকটি শেলের মধ্যে (উদাহরণস্বরূপ বাশ, ড্যাশ, জেডএস বা ksh93 নয়) কিছু কোণার ক্ষেত্রে pwdতুলনামূলকভাবে কম বাসি তথ্য দেবে $PWD$(pwd)অন্যদিকে, যদি বর্তমান ডিরেক্টরিটি নতুন লাইনের অক্ষরগুলিতে শেষ হয় তবে কোনও প্রক্রিয়া কাঁটাচামচ করা (ksh93 ব্যতীত) এবং অতিরিক্ত সংস্থান ব্যবহার করার অর্থ কাজ করে না। আমার দৃশ্য ব্যবহার $PWDএর $(pwd -P), এটি ব্যবহার মূল্য না $(pwd)
স্টাফেন চেজেলাস

1
নীচে সেখানে স্টেফেন ব্যবহারের উল্লেখ করেছে cd -P -- "$dir"। আপনার মান সম্পর্কে যদি সন্দেহ থাকে তবে $PWDসর্বদা cd -P .প্রথমে পারেন । এটিও উপকারী হতে পারে যে আপনি যা যা $PWDআগে পেয়েছিলেন তাও পেয়ে যান $OLDPWDএবং এরপরে তাদের তুলনা করতে পারেন - এবং পরবর্তী cd ...; cd -ক্রম আপনাকে এখন যেখানে আছেন সেখানে ফিরিয়ে আনতে নিশ্চিত হবে।
মাইকজার্ভ

উত্তর:


41

যদি বাশ মুখোমুখি হয় তবে $(pwd)এটি pwd কমান্ড কার্যকর করবে এবং $(pwd)এই কমান্ডের আউটপুটটি প্রতিস্থাপন করবে । $PWDএকটি পরিবর্তনশীল যা প্রায় সর্বদা সেট থাকে vari pwd একটি দীর্ঘকাল থেকেই একটি বিল্টিন শেল কমান্ড।

সুতরাং $PWDএই ভেরিয়েবলটি সেট না করা $(pwd)থাকলে ব্যর্থ হবে এবং আপনি যদি এমন শেল ব্যবহার করছেন $()যা আমার অভিজ্ঞতাকে প্রায়শই ক্ষেত্রে দেখা যায় না তবে এটি ব্যর্থ হয়। সুতরাং আমি ব্যবহার করব $PWD

প্রতিটি নার্দের মতো আমার নিজের শেল স্ক্রিপ্টিং টিউটোরিয়াল রয়েছে


6
আমি এই ছাপের মধ্যে `command`ছিলাম যে বাক্য গঠনটি অনাকাঙ্ক্ষিত ছিল এবং $(command)এটি পছন্দ করা উচিত। যতদূর আমি জানি পরবর্তীটি পসিক্স অনুগত, তবে আমি 100% নিশ্চিত নই।
Minix

6
@ মিনিক্স দ্য $()প্রকৃতপক্ষে পসিক্স দ্বারা নির্দিষ্ট করা হয়েছে সুতরাং /bin/shসোলারিস 10 এবং আরও পুরানো এবং cshপ্রাপ্ত শেলগুলিতে প্রাক পসিক্সের বাইরে পাওয়া যায় , আমি সন্দেহ করি যে মূলধারার অনেকগুলি শেলের বৈশিষ্ট্যের অভাব রয়েছে।
jlliagre

@ মিনিক্স: এখানে এই সাইটে একটি সাম্প্রতিক প্রশ্ন রয়েছে যা ব্যাকটিক্স ব্যবহারের পরিবর্তে একটি সমস্যা চিত্রিত করে$()
প্রধানমন্ত্রী 2Ring

ঠিক আছে, $ () এর পরিবর্তে আপনি ব্যাকটিক্স ব্যবহার করতে পারেন তবে এটি কাস্কেডেবল হবে না তাই আমি এটি উল্লেখ করিনি
থারস্টেন স্টার্ক

1
আপনার টিউটোরিয়ালে চমৎকার মিনিম্যাপ ....
কেবিটিজর

6

$PWDএটিরও উল্লেখ করা উচিত যা এর কার্য সম্পাদনের কারণে কাম্য। শেল ভেরিয়েবল হিসাবে এটি প্রায় তাত্ক্ষণিকভাবে সমাধান করা যেতে পারে। $(pwd)কিছুটা বিভ্রান্তিকর। যদি আপনি man 1 bulitinবাশ সহ কোনও সিস্টেমে পরিদর্শন করেন, আপনি দেখতে পাবেন pwdএটি একটি বিল্ট ইন কমান্ড, যা আপনাকে বিশ্বাস করতে পরিচালিত করতে পারে যে এটি ভেরিয়েবল অ্যাক্সেস করার মতোই দ্রুত হবে। যাইহোক, $()কনস্ট্রাক্ট ভিতরে থাকা তা নির্বিশেষে এর সামগ্রীগুলি চালনার জন্য সর্বদা একটি নতুন সাবশেল (একটি নতুন প্রক্রিয়া) চালু করে। একই জিনিস ব্যাকটিক্স জন্য যায়। আসলে, আমি যখন এটি মানদণ্ড করি:

echo 'Benchmarking $(pwd)...'
time (for i in {1..1000}; do echo $(pwd) > /dev/null; done)
echo 'Benchmarking $PWD...'
time (for i in {1..1000}; do echo $PWD > /dev/null; done)

আমি $(pwd)কলটির জন্য 1.52 সেকেন্ড এবং 0.018 সেকেন্ডের জন্য পেয়েছি $PWD। সাবস্কেলগুলির অপ্রয়োজনীয় প্রবর্তন, পাশাপাশি অন্য যে কোনও বহিরাগত প্রক্রিয়াটি যখনই সম্ভব এড়ানো উচিত। এগুলি ফাংশন কলগুলির চেয়ে অনেক বেশি ব্যয়বহুল যা আপনি অন্য ভাষায় ব্যবহার করতে পারেন।


এটি একটি আকর্ষণীয় গ্রহণ, তবে আমি জানি না যে আমি আমার শেল স্ক্রিপ্টগুলির পারফরম্যান্স সম্পর্কে উদ্বিগ্ন কিনা। পিডাব্লুডির অনুসন্ধানের মধ্যে যদি পরিবর্তন হয় তবে পারফরম্যান্স কীভাবে পরিবর্তিত হবে তা আমিও আশ্চর্য হয়েছি।
মিনিক্স

@ মিনিক্স আমি আমার স্ক্রিপ্টটি সংশোধন করে লুপের বডি হতে echo $PWD; pushd ..; echo $PWD; popd( >/dev/nullপ্রতিটি বিবৃতি দেওয়ার পরে অতিরিক্ত সহ ) রাখতে এবং এটি 0.05 সেকেন্ড সময় নেয়। এরপরে আমি ইকো স্টেটমেন্টগুলি সরিয়ে ফেললাম (কেবল পুশড / পপড) এবং এটি গ্রহণ করেছে 0.03। সুতরাং প্রতি echo $PWDসময় এখনও 0.01 সেকেন্ড বা তাই ছিল। আমি এর সাথে অনুরূপ কিছু করেছি $(pwd)এবং এটি প্রতিটি লুপের জন্য ২.২ সেকেন্ড সময় নিয়েছিল তাই প্রতি $(pwd)কলে ১.১ সেকেন্ড ।
মার্কাসফলওয়ার

খুব বাছাইয়ের মতো নয়, তবে আমি কল্পনা করতে পারি যে প্রতিস্থাপন $PWDকরবে যে গণনাটি প্রতিধ্বনি বিবৃতিগুলির মূল্যায়নের আগে পটভূমিতে করা হবে। তবে স্পষ্টতই, অ্যাক্সেস $PWDএখনও তাত্পর্যপূর্ণভাবে দ্রুত, সুতরাং যদি সামঞ্জস্যতা কোনও উদ্বেগ না হয় তবে এটি অবশ্যই একে অপরকে বেছে নেওয়ার কারণ। এটি এত পুঙ্খানুপুঙ্খভাবে পরীক্ষায় কাজ করার জন্য ধন্যবাদ। :)
মিনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.