$HOMEі ~зазвичай посилаються на те саме. Тобто вони є шляхом до каталогу "домашня сторінка користувача", який має загальну форму "/ home / userName".
Коли вони взагалі не звертаються до одного каталогу?
$HOMEі ~зазвичай посилаються на те саме. Тобто вони є шляхом до каталогу "домашня сторінка користувача", який має загальну форму "/ home / userName".
Коли вони взагалі не звертаються до одного каталогу?
Відповіді:
Обидва $HOMEі ~вказують на одну і ту ж папку, домашню папку поточного користувача, але обидві речі дуже різні.
$HOMEце змінна середовище , яка встановлена таким, що містить домашню папку поточного користувача.~є символом розширення оболонки , тобто одним із символів, який обробляється до виконання фактичної команди. ~поодинці розширюється до значення $ HOME. ~nemoрозширюється на домашній каталог користувача nemo. Символ розширення оболонки - це символ (або пара символів), який обробляється / інтерпретується оболонкою для побудови фактичної команди. Ще один приклад символу розширення оболонки - *це розширення імен файлів.~розширюється до $ HOME або% APPDATA% у Windows. Якщо вони не визначені, він шукатиме шлях у "базі даних паролів" (що зазвичай означає /etc/passwd, але це може бути LDAP або якесь інше джерело даних). Дещо 20 років тому вас могли попередити, що $ HOME може не встановлюватися на деяких машинах, тоді ~як гарантовано розшириться на щось.
~розширюється на $HOME(рівне $HOMEPATH), не $APPDATA. А на cmd.exe ~не розширюється.
HOME- це змінна середовище (концепція ОС, наприклад, в оболонках sh, встановлена з exportабо declare -x), а не змінна оболонка (визначення якої повністю залежить від оболонки, але в оболонках sh вона зазвичай встановлюється з foo=valueабо з setкількома іншими способи).
Один із способів їх розходження полягає в тому, як оболонка Bash перетворює їх, коли вони укладені у "вигляді лапок.
Якщо ви використовуєте echoтак, без жодних лапок, тоді ~і $HOMEматимете такий же ефект:
$ echo ~
/home/elias
$ echo $HOME
/home/elias
Однак, "біля лапок, результат відрізняється:
$ echo "~"
~
$ echo "$HOME"
/home/elias
~розширюється лише як частина префікса тильди, яка за визначенням повинна починатися на початку слова. Крім того, як це було колись частиною глобальних моделей, ~не буде працювати всередині подвійних лапок. Отже, "~"або a~bце призведе до ~збереження буквальної цінності .
Один ~(або з ~ним а /) буде розширено до будинку поточного користувача:
$ echo ~/.ssh
/home/user/.ssh
Після ~цього ім’я користувача розшириться до домашньої папки цього користувача:
$ echo ~root/.ssh
/root/.ssh
~Супроводжуваний +або -і додатковий номер буде розширюватися до елементів стека каталогів :
$ cd /etc
$ echo ~+0
/etc
$HOMEє еквівалентом одиничного ~, який замість цього дотримується синтаксичних правил для змінних. Наприклад, він розширюється всередині подвійних лапок, може бути скинутий, і до нього можуть бути застосовані операнди обробки рядків .
Це дуже залежить від того, що робить розширення. У bash, ~це зручний спосіб отримати домашній каталог, не викликаючи розширення імені файлів або розбиття слів, навіть незважаючи на це. Наприклад:
$ 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|
Тож, якщо ви боретесь з цитатами з якоїсь причини (у такому випадку вам слід справді переосмислити всю справу, легше боротися зі свинями), ~можливо, буде зручніше.
В іншому місці, наприклад, в Python, ~і $HOMEїх потрібно розширити різними функціями . Деякі інші місця дозволяють змінні і не дозволяють іншим синтаксисам оболонки, наприклад, підстановочним символом або розширенням тильди (наприклад ~/.pam_environment, який має спеціальний синтаксис для змінного розширення). Однак інші місця дозволяють розширення tilde як виняток (наприклад, systemd ), але запитувати базу даних passwd безпосередньо замість використання $HOME.
$HOME, але ви не можете (безпосередньо) змінити значення ~.
$HOMEа ~не посилатися на одне і те саме - вони зазвичай роблять за замовчуванням - і тоді ви навмисно призначаєте змінну оточення, щоб вони не посилалися на одне і те ж. Це хороша демонстрація, але зайво заплутана.
$ HOME / швидше працює у стандартному POSIX.2 Bourne / bin / sh, оскільки розширення tilde є розширенням, знайденим у BSD csh tcsh GNU bash та інших.
Якщо ви хочете писати скрипти, переносні на busbox або тире або BSD sh, вкладайте гроші в додаткові літери, щоб не зірватися з ~ /: Немає такого файлу чи каталогу в певних системах.
Я також вважаю, що $ HOME / більше читається.
$HOMEі рідко використовують ~. Моя колишня власна людина, мабуть, знала це.
~є оболонка залежить в той час як $ HOME немає.