কমান্ড হিসাবে ব্যাকস্ল্যাশ ডট মানে কি?


17

আমি ইনস্টল করা একটি সফ্টওয়্যার আমার প্রোফাইলে একটি লাইন প্রবেশ করিয়েছে যা এতে লেখা আছে:

[ -s "$SOME_FILE" ] && \. "$SOME_FILE"

আমি জানি যে বিন্দুটি .সমার্থক source, তাই আমার সন্দেহ হয় এটি কেবল ফাইলটি সোসারি করছে তবে আমি এর \.আগে কখনও দেখিনি ; এটি অন্য কিছু করে?

ডিভিএস সম্পর্কিত, সম্পাদনা করুন: "ব্যাকস্ল্যাশ ডট" অনুসন্ধান ./করলে এক্সিকিউটেবল ফাইলগুলি কল করার ক্ষেত্রে প্রশ্নগুলির দিকে পরিচালিত হয় এবং এমন ম্যানপেজের দিকে নিয়ে man sourceযায় যেখানে \.উপস্থিত হয় না। আমি আর কি চেষ্টা করতে হবে জানি না, তাই প্রশ্ন।

সম্পাদনা 2: সম্পর্কিত প্রশ্নগুলি দেখুন

উত্তর:


31

উদ্ধৃতিগুলির বাইরে একটি ব্যাকস্ল্যাশ মানে "পার্সিংয়ের সময় পরবর্তী চরিত্রটি আক্ষরিক অর্থে ব্যাখ্যা করুন"। যেহেতু .পার্সারের পক্ষে একটি সাধারণ চরিত্র, \.তেমনিভাবে পার্স করা হয় .এবং বিল্টিনকে আহ্বান জানায় .(যার sourceমধ্যে বাশ প্রতিশব্দ)।

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

আমার সন্দেহ হয় যে .এটি পরিবর্তিত হয়েছিল \.কারণ কোনও ব্যবহারকারী তাদের জন্য একটি উপনাম তৈরি করার পরে অভিযোগ করেছিলেন .

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

যাইহোক, কোনও এলিফের মধ্যে সংজ্ঞা দেওয়া .profileএকটি খারাপ ধারণা কারণ .profileএকটি সেশন ইনিশিয়ালাইজেশন স্ক্রিপ্ট, শেল ইনিশিয়ালাইজেশন স্ক্রিপ্ট নয়। বাশের জন্য উপকরণ অন্তর্ভুক্ত .bashrc


9

\.একটি "আক্ষরিক ডট" অর্থাৎ শুধু একটি বিন্দু। এটা তোলে মান হিসেবে গ্রহণ করা হবে .কমান্ড (অনুরূপ sourceমধ্যে bash)।

পজিক্স স্ট্যান্ডার্ডটির এটি সম্পর্কে বলতে হবে (আমার জোর)

একজন <backslash>উদ্ধৃত করা হয় না যে নিম্নলিখিত চরিত্রের আক্ষরিক মান সংরক্ষণ করিবে একটি ব্যতিক্রম, <newline>। যদি একটি <newline>অনুসরণ করে <backslash>, শেল এটি লাইন ধারাবাহিকতা হিসাবে ব্যাখ্যা করবে। এবং বিভাজন আগে টোকেন মধ্যে ইনপুট দূর হয়ে যাবে । যেহেতু পালানো পুরোপুরি ইনপুট থেকে সরানো হয়েছে এবং কোনও সাদা স্থান দ্বারা প্রতিস্থাপন করা হয়নি, এটি টোকেন বিভাজক হিসাবে কাজ করতে পারে না।<backslash><newline><newline>

বিন্দু চরিত্রটি এ্যালিজ করা যেতে পারে:

$ alias .='echo hello'
$ .
hello

যার অর্থ হ'ল কমান্ডের \.অ্যালিজেড সংস্করণ ব্যবহার করা এড়ানো হবে ., কারণ ,

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


কোনও শব্দে ব্যাকস্ল্যাশ কীভাবে উদ্ধৃত হিসাবে ব্যাখ্যা করা হয় এবং এটি কীভাবে ওরফের বিস্তারকে বাধা দেয় সে সম্পর্কে আমি সরকারী উত্সের সন্ধান করছিলাম। রেফারেন্সের জন্য ধন্যবাদ!
শেলজহান

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