$HOME
и ~
обычно ссылаются на одно и то же. То есть они являются путем к «домашнему» каталогу пользователя, который имеет общий вид »/home/userName".
Когда, если вообще, они не относятся к одному и тому же каталогу?
$HOME/, более вероятно, будет работать в стандартной Границе POSIX.2/bin/sh, поскольку расширение тильды является расширением, найденным в BSD csh tcsh удар GNU и другие.
, Если Вы хотите записать сценарии, портативные в busybox или тире или BSD sh, вложите капитал в дополнительные буквы, чтобы Вы не отказываете с ~/: Никакой такой файл или каталог в определенных системах.
я также нахожу $HOME/более читаемым.
И $HOME
и ~
точка к той же папке, домашней папке текущего пользователя, но оба - совсем другие вещи.
$HOME
переменная среды , который установлен содержать домашнюю папку текущего пользователя. ~
символ расширения оболочки , т.е. один из символов, который обрабатывается, прежде чем фактическая команда будет выполнена. ~
один расширяется до значения $HOME. ~nemo
расширяется до корневого каталога пользователя nemo
. Символ расширения оболочки является символом (или пара символов), который обрабатывается/интерпретируется оболочкой для создания фактической команды. Другой пример символа расширения оболочки *
, который используется для расширения имен файлов. Одним путем они отличаются, находится в том, как оболочка Bash преобразовывает их при включении в "
вид кавычек.
, Если Вы используете echo
как это, без каких-либо кавычек, затем ~
и $HOME
, имеют тот же эффект:
$ echo ~
/home/elias
$ echo $HOME
/home/elias
Однако с "
кавычки вокруг них, результат отличается:
$ echo "~"
~
$ echo "$HOME"
/home/elias
~
только расширяется как часть префикс тильды , который по определению должен запуститься в начале слова. Кроме того, поскольку это было, после того как часть globbing шаблонов, ~
не будет работать в двойных кавычках. Так, "~"
или a~b
приведет к литеральному значению ~
сохраняемый.
А, единственный ~
(или ~
сопровождаемый /
), расширится до дома текущего пользователя:
$ echo ~/.ssh
/home/user/.ssh
А ~
сопровождаемый именем пользователя расширится для размещения папки того пользователя:
$ echo ~root/.ssh
/root/.ssh
А ~
сопровождаемый +
или -
и дополнительное число расширится до элементов стопка каталога :
$ cd /etc
$ echo ~+0
/etc
$HOME
эквивалент сингла ~
, который вместо этого следует за синтаксическими правилами для переменных. Например, это разворачивает внутренние двойные кавычки, может быть сброшен, и , операнды обработки строк могут быть применены к нему.
Это во многом зависит от того, что делает расширение. В ударе, ~
удобный способ получить корневой каталог, не инициировав расширение имени файла или разделение слова даже при том, что его неупомянутое. Например:
$ 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
, который имеет специальный синтаксис для переменного расширения). Все же другие места позволяют расширение тильды как исключение (например, systemd), но запрашивают passwd базу данных непосредственно вместо того, чтобы использовать $HOME
.