$HOME
и ~
обычно ссылаются на одно и то же. То есть они представляют собой путь к «домашнему» каталогу пользователя, который имеет общую форму «/ home / userName».
Когда, если вообще, они не относятся к одному и тому же каталогу?
home-directory
H2ONaCl
источник
источник
~
зависит от оболочки, а $ HOME - нет.Ответы:
И то,
$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
получите тот же эффект:Однако с
"
кавычками вокруг них результат отличается:источник
~
расширяется только как часть префикса тильды, который по определению должен начинаться с начала слова. Кроме того, поскольку это когда-то было частью глобальных шаблонов, оно~
не будет работать внутри двойных кавычек. Таким образом,"~"
илиa~b
приведет к буквальному значению~
сохранения.Один
~
(или~
сопровождаемый/
) расширится до дома текущего пользователя:За
~
ним следует имя пользователя, которое развернется в домашнюю папку этого пользователя:За
~
ним следует a+
или a-
и необязательный номер, который расширится до элементов стека каталогов :$HOME
эквивалент одного~
, который вместо этого следует правилам синтаксиса для переменных. Например, он раскрывается внутри двойных кавычек, может быть не установлен, и к нему могут применяться операнды манипуляции со строками .источник
Это во многом зависит от того, что делает расширение. В bash
~
это удобный способ получить домашний каталог, не вызывая расширения имени файла или разделения слов, даже если он не заключен в кавычки. Например:Или:
Так что, если вы по каким-то причинам боретесь с кавычками (в этом случае вам следует по-настоящему переосмыслить все это, проще бороться со свиньями), это
~
может быть более удобным.В другом месте, например, в Python,
~
и$HOME
должны быть расширены с помощью различных функций . В некоторых других местах допускаются переменные и не допускается использование другого синтаксиса оболочки, например подстановочных знаков или раскрытия тильды (например~/.pam_environment
, который имеет специальный синтаксис для раскрытия переменных). Тем не менее, другие места допускают расширение тильды в качестве исключения (например, systemd ), но вместо использования запрашивают базу данных passwd напрямую$HOME
.источник
$HOME
, но вы не можете (напрямую) изменить значение~
.$HOME
и~
не ссылаться на одну и ту же вещь - они обычно делают по умолчанию - и затем вы сознательно назначаете переменную среды, чтобы они не ссылались на одну и ту же вещь. Это хорошая демонстрация, но излишне запутанная.$ HOME / более вероятно будет работать в стандартном POSIX.2 Bourne / bin / sh, поскольку расширение тильды является расширением, найденным в BSD csh tcsh GNU bash и других.
Если вы хотите написать сценарии, переносимые на busybox или dash или BSD sh, инвестируйте в дополнительные буквы, чтобы не потерпеть крах с ~ /: в некоторых системах такой файл или каталог отсутствуют.
Я также нахожу $ HOME / более читабельным.
источник
$HOME
и используются редко~
. Моя бывшая личность, вероятно, знала это.