OME হোম এবং ~ এর মধ্যে পার্থক্য ~


31

$HOMEএবং ~সাধারণত একই জিনিস উল্লেখ করুন। অর্থাৎ, তারা "ব্যবহারকারীর বাড়ি" ডিরেক্টরিতে যাওয়ার পথ যা সাধারণ ফর্ম "/ হোম / ইউজারনেম" এর।

কখন, যদি কখনও থাকে তবে এগুলি কি একই ডিরেক্টরিটিকে বোঝায় না?


11
~অর্থাৎ নির্ভরশীল শেল যখন $ হোম নয়।
কুলফাই

খুব সংশ্লিষ্ট unix.stackexchange.com/a/400715/85039
Sergiy Kolodyazhnyy

উত্তর:


45

উভয় $HOMEএবং ~একই ফোল্ডার, বর্তমান ব্যবহারকারীর হোম ফোল্ডারটি নির্দেশ করে তবে উভয়ই খুব আলাদা জিনিস।

  • $HOMEএকটি পরিবেশের পরিবর্তনশীল , এটি বর্তমান ব্যবহারকারীর হোম ফোল্ডার ধারণ করে।
  • ~একটি শেল প্রসারণ প্রতীক , প্রকৃত কমান্ড সঞ্চালনের আগে প্রক্রিয়া করা প্রতীকগুলির মধ্যে একটি। ~এককভাবে OME HOME এর মান পর্যন্ত প্রসারিত হয়। ~nemoব্যবহারকারীর হোম ডিরেক্টরিতে প্রসারিত হয় nemo। শেল প্রসারণ প্রতীক হ'ল একটি অক্ষর (বা অক্ষরের জুড়ি) যা প্রকৃত কমান্ডটি তৈরি করতে শেল দ্বারা প্রক্রিয়া করা / ব্যাখ্যা করা হয়। শেল প্রসারণ প্রতীকের আর একটি উদাহরণ *, যা ফাইলের নাম প্রসারিত করতে ব্যবহৃত হয়।

1
~উইন্ডোজটিতে $ HOME বা% APPDATA% এ প্রসারিত হয়। যদি এগুলি সংজ্ঞায়িত না করা হয় তবে এটি "পাসওয়ার্ড ডাটাবেস" (যা সাধারণত বোঝায় /etc/passwdতবে এলডিএপি বা অন্য কোনও ডেটা উত্স হতে পারে) এর পথ অনুসন্ধান করবে। প্রায় 20 বছর আগে আপনাকে সতর্ক করা যেতে পারে যে $ কোনও কোনও মেশিনে ~বাড়ানোর গ্যারান্টি দেওয়া হলেও কিছু মেশিনে হোম সেট করা যাবে না ।
মিরেক ডুগোস্জ

এই পার্থক্যটি মেকের মতো প্রোগ্রামগুলিতে উল্লেখযোগ্য, যখন আপনার দুজনের মধ্যে কোনটি প্রয়োজন তা জানতে হবে
ডি বেন নোবল

3
@ মিরেকডুগোস্জ অন্তত উইন্ডোজে গিট ব্যাশে , ~প্রসারিত হয় $HOME(সমান $HOMEPATH), না $APPDATA। এবং cmd.exe এ, ~প্রসারিত হয় না।
হাইড

1
@vanadium HOMEএকটি পরিবেশ পরিবর্তনশীল (একটি অপারেটিং সিস্টেম ধারণা রয়েছে SH সঙ্গে উদাহরণ স্থাপন জন্য শাঁস exportবা declare -x), না একটি শেল পরিবর্তনশীল (সংজ্ঞা যা সম্পূর্ণভাবে শেল উপর নির্ভর করে, কিন্তু SH শাঁস এটি সাধারণত সঙ্গে সেট করা হয় foo=valueবা setবা কয়েক অন্য উপায়)।
হাইড

1
@ হায়ড আমি ভুল বলেছি বাশ $ হোম অনুসন্ধান করবে, যদি এটি সেট না করা থাকে তবে এটি% অ্যাপ্লিকেশন% জন্য পরীক্ষা করবে, তবে কেবল উইন্ডোজই; যদি এটি সেট না করা থাকে তবে এটি "পাসওয়ার্ড ডাটাবেস" সন্ধান করবে। Git.savannah.gnu.org/cgit/bash.git/tree/lib/readline/…
মিরেক

17

তাদের পৃথক করার একটি উপায় হ'ল বাশ শেল কীভাবে "উদ্ধৃতি চিহ্নের ধরণে আবদ্ধ থাকে তা তাদের রূপান্তরিত করে ।

আপনি যদি echoকোনও উদ্ধৃতি ছাড়াই এটির মতো ব্যবহার করেন , তবে ~এবং $HOMEএকই রকম প্রভাব ফেলুন:

$ echo ~
/home/elias
$ echo $HOME
/home/elias

যাইহোক, "তাদের চারপাশে উদ্ধৃতি চিহ্ন সহ , ফলাফল পৃথক:

$ echo "~"
~
$ echo "$HOME"
/home/elias

13

~কেবল টিলড-উপসর্গের অংশ হিসাবে প্রসারিত হয় যা সংজ্ঞা অনুসারে শব্দের শুরুতে শুরু হওয়া উচিত। অধিকন্তু, এটি একসময় গ্লোব্বিং নিদর্শনগুলির অংশ হিসাবে, ~ডাবল উদ্ধৃতিগুলির মধ্যে কাজ করবে না। সুতরাং, "~"বা a~bএর ~সংরক্ষণের আক্ষরিক মূল্য হতে পারে।

একটি একক ~(বা এর ~পরে একটি /) বর্তমান ব্যবহারকারীর বাড়িতে প্রসারিত হবে:

$ echo ~/.ssh
/home/user/.ssh

এর ~পরে একটি ব্যবহারকারীর নাম ব্যবহারকারীর হোম ফোল্ডারে প্রসারিত হবে:

$ echo ~root/.ssh
/root/.ssh

এর ~পরে একটি +বা একটি -এবং একটি numberচ্ছিক নম্বর ডিরেক্টরি স্ট্যাকের উপাদানগুলিতে প্রসারিত হবে :

$ cd /etc
$ echo ~+0
/etc

$HOMEএটি একটি একক সমতুল্য ~, যা পরিবর্তে ভেরিয়েবলের জন্য বাক্য গঠন নিয়ম অনুসরণ করে। উদাহরণস্বরূপ, এটি ডাবল উদ্ধৃতিগুলির মধ্যে প্রসারিত হয়, আনসেট করা যায় এবং স্ট্রিং ম্যানিপুলেশন অপারেন্ডস এটি প্রয়োগ করা যেতে পারে।


3

এটি প্রসারণ কী করে তার উপর অনেক নির্ভর করে। বাশ-এ, ~ফাইলের নাম বাড়াতে বা শব্দ বিভাজক না করেও হোম ডিরেক্টরিটি পাওয়ার জন্য একটি সহজ উপায়। উদাহরণ স্বরূপ:

$ HOME='/*'
$ echo $HOME
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
$ echo ~
/*

বা:

$ HOME='/ a b'
$ printf "|%s|\n" $HOME ~
|/|
|a|
|b|
|/ a b|

সুতরাং যদি আপনি কোনও কারণে উদ্ধৃতি নিয়ে কুস্তি করছেন (এই ক্ষেত্রে আপনার পুরো বিষয়টি সত্যই পুনর্বিবেচনা করা উচিত, শূকরদের সাথে কুস্তি ~করা আরও সহজ ) সম্ভবত আরও সুবিধাজনক হতে পারে।


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


আরেকটি বড় পার্থক্য, যা আপনি এখানে দেখান, তবে উল্লেখ করবেন না, তা হ'ল আপনি এর মান পরিবর্তন $HOMEকরতে পারেন তবে আপনি (সরাসরি) এর মান পরিবর্তন করতে পারবেন না ~
জো

তাই আমি জিজ্ঞাসা করলাম কখন $HOMEএবং ~একই জিনিস পড়ুন না - তাদের কোনো দিনই ডিফল্টরূপে না - এবং তারপর আপনি ইচ্ছাকৃতভাবে এনভায়রনমেন্ট ভেরিয়েবল নির্ধারণ তাদের একই জিনিস পড়ুন না করা। এটি একটি ভাল প্রদর্শন তবে অযথা বিভ্রান্তিকর।
H2ONaCl

1

OME বাড়ির / স্ট্যান্ডার্ড POSIX.2 বোর্নে / বিন / এসএসে আরও বেশি কাজ করার সম্ভাবনা রয়েছে কারণ টিল্ড এক্সপেনশন বিএসডি সিএসএস টিসিএসএন জিএনইউ বাশ এবং অন্যদের মধ্যে পাওয়া যায় extension

আপনি যদি ব্যস্তবক্স বা ড্যাশ বা বিএসডি শের কাছে পোর্টেবল স্ক্রিপ্টগুলি লিখতে চান তবে অতিরিক্ত অক্ষরগুলিতে বিনিয়োগ করুন: /: এর সাথে ক্র্যাশ না করে নির্দিষ্ট সিস্টেমে এ জাতীয় ফাইল বা ডিরেক্টরি নেই।

আমি $ হোম / আরও পাঠযোগ্য find


স্ক্রিপ্টে পাঠযোগ্যতা এবং দৃশ্যমানতা গুরুত্বপূর্ণ are সম্ভবত এই কারণেই আমার স্ক্রিপ্টগুলি ব্যবহার করে $HOMEএবং খুব কমই ব্যবহার করে ~। আমার প্রাক্তন স্ব সম্ভবত এটি জানতেন।
H2ONaCl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.