একটি ডিরেক্টরি পাথের চলকটি কি শেষের স্ল্যাশের সাথে শেষ হওয়া উচিত?


89

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

pwdইউনিক্সে আপনার চলমান ডিরেক্টরিটি কোনও চলমান স্ল্যাশ ছাড়াই প্রদর্শন করে, যখন সম্পূর্ণ ট্যাবটিতে cd /var/www/apps/পিছনের স্ল্যাশ অন্তর্ভুক্ত থাকে, যা আমাকে অনিশ্চিত করে রেখেছিল।

উত্তর:


24

আমি উদাহরণস্বরূপ, ফাইল সংরক্ষণের জন্য একটি ডিরেক্টরি সংজ্ঞায়িত করার সময় আমি পিছনে স্ল্যাশ অন্তর্ভুক্ত করি না। কারণ এটি আমি এটির মতো ব্যবহার করব

$store_file = "$store_path/$file_id";

ডিরেক্টরি পাথ ধরে রাখার কথা এমন ভেরিয়েবল ব্যবহার করার আগে আমি সর্বদা একটি ট্রিলিং স্ল্যাশ যুক্ত করব। আমি মনে করি যে পিছনে স্ল্যাশ অন্তর্ভুক্ত করা হয়েছে কিনা তা অবাক করার চেয়ে সর্বদা একটি যুক্ত করা ভাল।


29
ট্রেলিং স্ল্যাশ না থাকার অর্থ এটি $ store_path এর পথটি কোনও ফাইল বা ডিরেক্টরি হলে এটি অস্পষ্ট। "/ tmp / store_data" এটি ফাইল বা ডিরেক্টরি?
ডারউইন

4
পিএইচপি এর রিয়েলপ্যাথ () ফাংশন জাতীয় কিছু ব্যবহার করার সময় , এটি পিছনে স্ল্যাশ প্রিন্ট করবে না। আপনার সিস্টেম এবং সরঞ্জামগুলি আপনার কনভেনশনটি নির্দেশ করতে পারে।
jumbertucci

10
সাধারণত যে কোনও জায়গায় একাধিক স্ল্যাশ থাকার অর্থ একক স্ল্যাশ হিসাবে ব্যাখ্যা করা হবে। সুতরাং আপনি এমনকি কিছু থাকতে পারে '///' + $root + '//' + $file + '/'এবং এটি কোন ব্যাপার না। যদিও পিছনের স্ল্যাশ থাকা পথটি একটি ফাইল বা ডিরেক্টরি কিনা তা বোঝার একটি ভাল উপায় যদিও আপনি যে পথটি সংযুক্ত করছেন তাতে একটি পথ চলমান স্ল্যাশ রয়েছে '/' + $rootএমনটি $root + '/'ইতিবাচক হতে পারেন না তার চেয়ে পাথগুলিতে যুক্ত হওয়া ভাল would , তবে আপনি তুলনামূলকভাবে নিশ্চিত হতে পারেন যে একাধিক স্ল্যাশ বেশিরভাগ পরিবেশে একক স্ল্যাশ হিসাবে ব্যাখ্যা করা হবে।
এক্সট্রিনিটি

4
@ ম্যাথিউস্লিমন, আমার বক্তব্যটি ছিল যে প্রত্যেকেই /tmp/store_data/এটি একটি ডিরেক্টরি হিসাবে প্রত্যাশা করে , তবে ট্রলিং স্ল্যাশ ছাড়াই একই পথটি কী তা অস্পষ্ট/tmp/store_data
ডারউইন

6
এটির সাথে সমস্যাটি হ'ল: যদি কোনও ভেরিয়েবলের অস্তিত্ব না থাকে তবে এটি খালি হিসাবে একই এবং rm -rf $foo/$barrm -rf /
এটির

102

আমি পিছনে স্ল্যাশ নিয়ে যাচ্ছি কারণ:

  1. "এটি যদি একটি স্ল্যাশ দিয়ে শেষ হয় তবে এটি একটি ডিরেক্টরি। এটি না হলে এটি একটি ফাইল" " মনে রাখা একটি সহজ সম্মেলন।

  2. কমপক্ষে অপারেটিং সিস্টেমগুলিতে আমি সাধারণত ব্যবহার করি, স্ল্যাশ দ্বিগুণ করার ফলে কোনও সমস্যা হয় না, স্ল্যাশ বাদ দিলে বড় সমস্যা হয়। সুতরাং, উভয়ই পরিবর্তনশীল মধ্যে স্ল্যাশ রাখা সবচেয়ে নিরাপদ এবং এটির ব্যবহার করার সময় "when path / $ ফাইল" ব্যবহার করুন।


9
ডিরেক্টরি পাথ কেবল একটি ফাইল পাথ থেকে পৃথকযোগ্য যদি ডিরেক্টরি পাথের পিছনে স্ল্যাশ থাকে।
ডারউইন

4
একাধিক স্ল্যাশ এক স্ল্যাশের সমতুল্য, যদি না ডাবল স্ল্যাশ দিয়ে পথ শুরু হয়। দেখুন unix.stackexchange.com/questions/1910/...
jdh8

4
বৈকল্পিকের শেষে স্ল্যাশ যোগ করার সাথে সাথে "$ path / $ file" এর পরিবর্তে "$ path $ file" ফাইলের অনুমতি দেয় যা খালি $ পাথের জন্য অনুমতি দেয় - যার অর্থ বর্তমান ওয়ার্কিং ডিরেক্টরি। তবে কখনও স্ল্যাশের পরিবর্তে ব্যাকস্ল্যাশ ব্যবহার করবেন না।
কল্পনাপ্রসূত

ফাইল বর্ণনাকারীও দরকারী
ফ্রান্সেস্কো গুয়ালাপি

@ jdh8 এমনকি পথটি ডাবল স্ল্যাশ দিয়ে শুরু হলেও এটি এখনও একটি স্ল্যাশের সমতুল্য হওয়া উচিত। যদিও এটি বাস্তবায়ন থেকে বাস্তবায়নে পরিবর্তিত হতে পারে। ইউনিক্স মান উল্লেখ করে যে A pathname that begins with two successive slashes may be interpreted in an implementation-defined manner, although more than two leading slashes shall be treated as a single slash.বেশিরভাগ অংশে এটি দেখা গেছে যে ডাবল স্ল্যাশগুলি সাধারণত সাধারণ বাস্তবায়নে একক স্ল্যাশ হিসাবে ব্যাখ্যা করা হয়।
এক্সট্রিনিটি

14

আমি জানি যে এটি 10 ​​বছর বয়সী, তবে আমি আমার খুব মতামত $ 0.02 এ দিতে চাই।

না। না।

আমরা একটি ইউনিক্স সিস্টেম সম্পর্কে কথা বলছি। ডিরেক্টরি নিজেই রেফারেন্স হিসাবে, এটি অন্য মত একটি নোড। যখন ডিরেক্টরি উল্লেখ, এটা কখনও তার নাম একটি unescaped স্ল্যাশ থাকা উচিত নয় (সূত্র: dirname, pwd, ~, echo $HOME, echo $PATH, থেকে আউটপুট ls, এট)।

যখন একটি ডিরেক্টরির সামগ্রীগুলি উল্লেখ, তারপর আপনি একটি স্ল্যাশ প্রয়োজন। এটি বলার অপেক্ষা রাখে না, এর ls /home/karl/চেয়ে বেশি উপযুক্ত ls /home/karl(এফটিআর, আমি প্রায় সবসময় পরে করি কারণ ... ভাল, অলস)।

কোনও ফাইলের সম্পূর্ণ পথ তৈরি করার জন্য ডিরেক্টরি সহ একটি ভেরিয়েবল ব্যবহার করার সময়, আপনি সর্বদা স্ল্যাশ অন্তর্ভুক্ত করার আশা করবেন (i।, E cp ${HOME}/test ${OTHER_DIR}/:)।

এটি প্রত্যাশিত যে কোনও ডিরেক্টরি একটি স্ল্যাশে শেষ হবে না। ডিরেক্টরি স্ল্যাশে শেষ হওয়ার কোনও প্রত্যাশা ভুল। এইভাবে একটি *_DIRভেরিয়েবলের মানটির শেষে একটি স্ল্যাশ যুক্ত করা প্রত্যাশাগুলি বিভ্রান্ত করা হবে।

ট্যাব সমাপ্তির হিসাবে, প্রত্যাশা এখানে যাচ্ছ হয় মধ্যে যে ডিরেক্টরি। সুতরাং, ট্যাব সমাপ্তির দ্বারা সরবরাহিত সহায়তা হ'ল আপনাকে সেই ডিরেক্টরিতে অন্তর্ভুক্ত করা যাতে আপনি তার সামগ্রীর উপর ভিত্তি করে পরবর্তী পছন্দটি করতে পারেন।

(মন্তব্য থেকে রেফারেন্স: উইকিপিডিয়া পৃষ্ঠা থেকে ফাইলপথ ভুল ধারণা , Talk:Path_(computing)ধন্যবাদ। জন সিজে )

এটি লক্ষণীয় যে কেবল এটির ভুল হওয়ার অর্থ এই নয় যে সরঞ্জাম / প্যাকেজ / লাইব্রেরি কখনই এটি করে না। এটি একটি খুব সাধারণ ঘটনা যে কোনও কিছুর অস্তিত্ব না থাকাতে এই জাতীয় জিনিসগুলি একটি ট্রেলিং স্ল্যাশ যুক্ত করে। অতএব, বেভান এবং পল এফ উভয়ের পরামর্শ অনুসারে, তৃতীয় পক্ষের সরঞ্জামগুলি ব্যবহার করার সময় ডিরেক্টরি নামের মধ্যে থাকা যে কোনও পিছনের স্ল্যাশগুলি সরিয়ে ফেলা ভাল।

ইউনিক্স ইনোডস

ইনোড (সূচক নোড) ইউনিক্স-স্টাইলের ফাইল সিস্টেমের একটি ডেটা স্ট্রাকচার যা কোনও ফাইল বা ডিরেক্টরি হিসাবে একটি ফাইল-সিস্টেমের অবজেক্টকে বর্ণনা করে।

- https://en.wikedia.org/wiki/Inode

ফাইল সিস্টেম হায়ারার্কি স্ট্যান্ডার্ড

ইউনিক্স ফাইল সিস্টেম (ফাইলসিস্টেম শ্রেণীক্রম স্ট্যান্ডার্ড, ওরফে FHS) জন্য আদর্শ পরিষ্কারভাবে দেখায় যে ডিরেক্টরি চিন্তা নেই একটি trailing স্ল্যাশ তার হিসাবে, বরং ডিরেক্টরির বিষয়বস্তু স্ল্যাশ দিয়ে শুরু হয় (এই একমাত্র ব্যতিক্রম নয় /, কারণ আমরা পড়ুন করা হবে না একটি খালি স্ট্রিং ব্যবহার করে ফাইল সিস্টেমের রুট ... এবং যে কোনওভাবে সেখানে কখনও ফাইল তৈরি করা উচিত নয়))

- http://www.pathname.com/fhs/pub/fhs-2.3.html

- https://en.wikedia.org/wiki/Files systemm হাইয়ারচি_ স্ট্যান্ডার্ড


দুর্দান্ত উত্তর। আমি এই পদ্ধতির ব্যবহারের প্রবণতা রেখেছি তবে কেন আমার যুক্তি হিসাবে সম্পূর্ণরূপে সম্পূর্ণ হয়নি। এটিই কেবল উত্তর যা এটি নখ করে।
ওয়ার্ডও

4
এটি মূল /যা প্যাটার্নটি ভেঙে যায়। এবং যদি আপনি এখান থেকে আপনার যুক্তি শুরু করতে চান (পুনরাবৃত্তিমূলকভাবে) আপনি তখন বিভেদ অনুশীলনের কেন্দ্রবিন্দুতে থাকতে পারে এমন বিবাদগুলি (এখানে উত্তরগুলি থেকে প্রমাণিত হিসাবে) পেতে পারেন। তবে একবার আপনি ব্যতিক্রম হিসাবে এটি স্বীকার করে নিলে অন্য সমস্ত কিছু লাইনে চলে যায়।
ওয়ার্ডও

আমি দেখি. ডায়ারনেম দিয়ে কিছুটা খেললাম। যদি আপনি স্পষ্টভাবে কোনও ডিরেক্টরিতে কোনও ডিরেক্টরি সঞ্চয় করতে চান, তবে একটি "/।" দিয়ে পথটি শেষ করুন, যেখানে বিন্দুটি বর্তমান ডিরেক্টরিটিকে উপস্থাপন করে।
TamusJRoyce

4
@ অগ্রিম আপনি রুট ডিরেক্টরিটিকে খালি স্ট্রিং হিসাবে নামকরণ হিসাবে ভাবতে পারেন, যখন "/" একটি খালি স্ট্রিং পরে স্ল্যাশ হয় এবং এর অর্থ "রুট ডিরেক্টরিটির বিষয়বস্তু"।
ববপল

4
এই উত্তর আরও upvated করা উচিত। উইকিতে ফাইলপথ ভুল ধারণার অংশটিও দেখুন ।
জন সিজে

9

হ্যাঁ, এটি হওয়া উচিত:

পথের নাম + ফাইলের নাম = সম্পূর্ণ যোগ্যতাসম্পন্ন ফাইলের অবস্থান।

সুতরাং সর্বশেষ ডিরেক্টরি এবং ফাইল নামের মধ্যে স্ল্যাশটি হয় পথের শেষে বা ফাইলের নামের শেষে হওয়া দরকার। ফাইলের নামগুলি / এর সাথে পূর্বনির্ধারিত করার অর্থ যদি আপনি কেবল কোনও ফাইল খুলতে চান (তবে আপনি যদি ধরে নেন যে কোনও অযোগ্য ফাইলের নাম বর্তমান কার্যনির্বাহী ডিরেক্টরিতে রয়েছে) you


4
.. এবং এটিকে
আমলে

5

আমি যখনই ডিরেক্টরি পাথগুলি সঞ্চয় করি বা এপিআইগুলি থেকে তাদের ফিরিয়ে দেই, তখন আমি চেষ্টা করি এবং একটি পিছনে স্ল্যাশ রাখার কনভেনশনটি ধরে রাখি। এটি পুরোপুরি এড়িয়ে যায় 'এটি ফাইল বা ডিরেক্টরি' অস্পষ্টতা।

সংযোজন :
এটি এমন পদ্ধতি ব্যবহারের বিকল্প হিসাবে নয় যা ট্রেলিং স্ল্যাশ বা এর অনুপস্থিতি সহ্য করতে পারে। এমনকি এই কনভেনশনটি ব্যবহার করে আমি এখনও সর্বদা Path.Combine(...)এবং অনুরূপ পদ্ধতি ব্যবহার করি ।


অজগর:os.path.join(dir, subdir_or_file)
আইসআর্ডার

5

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

এখন, যদি কোনও কারণে, আপনি যখন স্ট্রিংগুলি একত্রীকরণ করার সময় ফাইলটির দিকে যাওয়ার পথটি অনুপস্থিত থাকে তবে আপনি এমন কিছু দিয়ে শেষ করেন /filenameযা কেবল একটি ফাইল নয় মূল রুট ডিরেক্টরি থেকে পরম পথ (যেখানেই সে প্রসঙ্গে থাকতে পারে) ।

সে কারণেই আমি আমার পথগুলি স্ল্যাশ দিয়ে শেষ করি এবং ফাইলগুলি ফাইল হিসাবে রাখি।


4
বিকল্প এখানে আপনার ফাইলের নাম হিসাবে প্রকাশ করা হয় ./filename। তবে সাধারণভাবে এটি সঠিকভাবে করার জন্য পথগুলিকে একচেটিয়া করার কোডের দায়িত্ব হওয়া উচিত - এবং কোনওভাবেই অনুমান করা উচিত নয়।
ওয়ারডব

4

আমি জানি এটি একটি পুরানো থ্রেড তবে আমি ভেবেছিলাম আমি কী করব তা ভাগ করে নিই। যদি সম্ভব হয় তবে আমি সাধারণত উভয়ের জন্য অনুমতি দিতাম এবং এর মতো কিছু করতাম (যদি এটি পিএইচপি হত):

$fullPath = rtrim($directory, '/') . '/filename.txt');

এইভাবে, ডিরেক্টরিটি যদি কোনও কনফিগার ফাইলে সংজ্ঞায়িত করা হয়, তবে পরবর্তী ব্যক্তির পরিবর্তন করতে এটি পিছনে স্ল্যাশ অন্তর্ভুক্ত কিনা তা বিবেচনা করে না।


4

পিএইচপি-তে, যেহেতু ডারনাম (__ ফাইল __) ফাংশনটি শেষে স্ল্যাশ ছাড়াই ডিরেক্টরিটির নাম দেয়। আমি সেই সম্মেলনে লেগে থাকি।

অন্যথায়, ডিরেক্টরি নামের শেষে একটি স্ল্যাশ ব্যবহার করার ফলে ডাইরনাম (..) যেভাবে কাজ করবে তার দ্বন্দ্ব দেখাবে এবং তারপরে আপনি দুটি কেস পরিচালনা করতে আটকে যাবেন কারণ আপনি জানেন না যে ডিরেক্টরিটির নামটি কোনও নাম থেকে এসেছে কিনা .. .. ) ফাংশন বা একটি সামগ্রীর পিছনে স্ল্যাশ দ্বারা সংজ্ঞায়িত।

নীচের লাইন: যেহেতু ডারনাম (..) দেয় না তাই ট্রেলিং স্ল্যাশ ব্যবহার করবেন না।

// PHP Example
dirname(__FILE__); // returns c:\my\directory without a trailing slash, so stick to it!

অন্যান্য ভাষার ক্ষেত্রে, কোনও ফাংশন যা কোনও পাথের নাম বের করে তা পরীক্ষা করে দেখুন এবং দেখুন যে এটি কোনও ট্রিলিং স্ল্যাশ ব্যবহার করছে কিনা, তবে ভাষাটির সম্মেলনে আটকে থাকুন।


4
একটি ব্যতিক্রম: dirname ('/ test') = '/' - খালি স্ট্রিং ফিরিয়ে দেওয়ার পরিবর্তে, dirname এই ক্ষেত্রে একটি একক স্ল্যাশ প্রদান করে! নোট এখানে দেখুন
ম্যাথু স্লিম্যান

3

আমি কেবলমাত্র পিছনের স্ল্যাশ যুক্ত করার ঝোঁক রাখি কারণ আমি সম্ভবত ফাইলটি যুক্ত / পুনরুদ্ধার করতে সেই ডিরেক্টরিটি ব্যবহার করতে যাচ্ছি ...

ওয়েব রেফারেন্সিংয়ের ক্ষেত্রে, এটি পিছনে পিছনে ফেলে স্ল্যাশ রেখে কার্যকারিতা বাড়িয়ে তুলতে পারে

http://www.netmechanic.com/news/vol4/load_no11.htm


2

হ্যাঁ, এমন অনেকগুলি ফাইল সিস্টেম রয়েছে যা কোনও এক্সটেনশন ছাড়াই ফাইলগুলিকে সমর্থন করে, তাই কোনও সমস্যা এড়াতে সর্বদা ট্রেলিং স্ল্যাশ যুক্ত করুন।


1

আমি কখনও দৃ firm় কনভেনশন দেখিনি।

খুব নিশ্চিত, যদিও, আপনি যেই স্থির করেন না কেন, অন্য কেউ এটির অন্যভাবে হওয়া উচিত 100% নিশ্চিত। সুতরাং, সর্বোত্তম ধারণাটি যে কোনও উপায়ে সেট করা জিনিসগুলি সহ্য করা।

.NET বিশ্বে, পাথ.কোমাইন () আপনাকে এটি পরিচালনা করার একটি উপায় দেয় - সেমিডিডি আপ আপ থেকে শুরু করে অন্যান্য পরিবেশে সমতা রয়েছে।


1

আমার ধারণা, এটি সেই বিরল ক্ষেত্রে অন্যতম একটি যেখানে সঠিক তাত্ত্বিক এবং ব্যবহারিকভাবে উত্তর আলাদা different

মনে হচ্ছে @ কার্ল উইলবারের উত্তরটি অবশ্যই তাত্ত্বিক দিক থেকে সঠিক, কারণ আপনার ডিরেক্টরি নোডের একটি উল্লেখকে ডিরেক্টরিটির বিষয়বস্তু থেকে আলাদা করতে সক্ষম হওয়া উচিত।

তবে বাস্তবে আমি যুক্তি দেব যে সঠিক উত্তরটি বিপরীত:

  • সর্বাধিক গুরুত্বপূর্ণ কারণটি আপনি নিশ্চিতভাবে বলতে পারবেন যে পথটি /home/FSObjectX/একটি ফোল্ডার, যেখানে /home/FSObjectXদ্ব্যর্থক। এটি কোনও ফোল্ডারের ফাইল কিনা তা কেউ বলতে পারে না।
    স্পেসিফিকেশন সর্বদা সুনির্দিষ্ট এবং দ্ব্যর্থহীন যখনই সম্ভব হবে।

  • বেশিরভাগ ক্ষেত্রে, আপনি সর্বদা কোনও ফোল্ডারের বিষয়বস্তু উল্লেখ করবেন, দির নোড নিজেই নয়।
    যেসব বিরল ক্ষেত্রে আপনি প্রকৃতপক্ষে করেন না কেন, সহজেই যেকোন dচ্ছিক চলমান দির-বিভাজককে সরিয়ে কোডে এটি পরিচালনা করা যায়।

  • ডাবল ডির-বিভাজকগুলি ব্যবহার করা কোনও ক্ষতি করবে না, যদিও অনুপস্থিত একটি নিশ্চিত হয়ে যাবে।
    তাত্ত্বিকভাবে আপনার "সুযোগ" দ্বারা কোড করা উচিত নয় হিসাবে একটি খারাপ যুক্তি, কিন্তু বাস্তবে ত্রুটিগুলি ঘটে থাকে এবং সম্ভবত ডায়ার-সিপ ব্যবহার করে শেষ ব্যবহারকারীর কয়েকটি কম রানটাইম ত্রুটি শেষ হতে পারে।

এই আকর্ষণীয় থ্রেডটি পড়ার পরে আমি অনুপস্থিত ডিয়ার-সেপ ব্যবহারের কোনও অসুবিধা খুঁজে পাইনি, কেবল এটি তাত্ত্বিক দিক থেকে ভুল। নাকি আমি কিছু মিস করেছি?


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