$HOME
et ~
se réfèrent généralement à la même chose. C'est-à-dire qu'ils sont le chemin vers le répertoire "home de l'utilisateur" qui a la forme générale "/ home / userName".
Quand, si jamais, ceux-ci ne font pas référence au même répertoire?
home-directory
H2ONaCl
la source
la source
~
dépend du shell tandis que $ HOME ne l'est pas.Réponses:
Les deux
$HOME
et~
pointent vers le même dossier, le dossier de l'utilisateur actuel, mais les deux sont des choses très différentes.$HOME
est une variable d'environnement qui est définie pour contenir le dossier de départ de l'utilisateur actuel.~
est un symbole d'expansion du shell , c'est-à-dire l'un des symboles qui est traité avant l'exécution de la commande réelle.~
seule augmente à la valeur de $ HOME.~nemo
se développe dans le répertoire personnel de l'utilisateurnemo
. Un symbole d'extension de shell est un caractère (ou une paire de caractères) qui est traité / interprété par le shell pour générer la commande réelle. Un autre exemple de symbole d'extension de shell*
est utilisé pour développer les noms de fichiers.la source
~
se développe en $ HOME ou% APPDATA% sous Windows. S'ils ne sont pas définis, il recherchera le chemin dans "la base de données de mots de passe" (ce qui signifie généralement/etc/passwd
, mais peut être LDAP ou une autre source de données). Il y a environ 20 ans, vous auriez pu être averti que $ HOME pourrait ne pas être défini sur certaines machines, alors qu'il~
était garanti de s'étendre à quelque chose.~
développe en$HOME
(égal à$HOMEPATH
), non$APPDATA
. Et sur cmd.exe,~
ne se développe pas.HOME
est une variable d'environnement (un concept de système d' exploitation, en sh coquilles par exemple ensemble avecexport
oudeclare -x
), et non une variable shell (définition dont dépend entièrement de la coquille, mais sh coquilles , il est généralement réglé avecfoo=value
ou avecset
ou dans quelques autres façons).Une façon dont ils diffèrent réside dans la façon dont le shell Bash les convertit lorsqu'il est placé entre
"
guillemets.Si vous utilisez
echo
comme ceci, sans guillemets, alors~
et$HOME
avez le même effet:Cependant, avec des
"
guillemets autour d'eux, le résultat diffère:la source
~
ne se développe que dans le cadre d'un préfixe tilde qui, par définition, doit commencer au début du mot. De plus, comme il faisait autrefois partie des modèles de globalisation,~
ne fonctionnera pas dans les guillemets doubles. Donc,"~"
oua~b
entraînera une valeur littérale d'~
être préservé.Un seul
~
(ou un~
suivi d'un/
) s'étendra au domicile de l'utilisateur actuel:Un
~
suivi d'un nom d'utilisateur se développera dans le dossier d'accueil de cet utilisateur:Un
~
suivi d'un+
ou d'un-
et d'un numéro facultatif s'étendra aux éléments de la pile de répertoires :$HOME
est l'équivalent d'un simple~
, qui suit à la place des règles de syntaxe pour les variables. Par exemple, il se développe entre guillemets doubles, peut être non défini et des opérandes de manipulation de chaînes peuvent lui être appliqués.la source
Cela dépend beaucoup de ce que fait l'expansion. En bash,
~
est un moyen pratique d'obtenir le répertoire personnel sans déclencher l'expansion du nom de fichier ou le fractionnement des mots même s'il n'est pas cité. Par exemple:Ou:
Donc, si vous luttez avec des citations pour une raison quelconque (auquel cas vous devriez vraiment repenser le tout, il est plus facile de lutter contre les porcs),
~
pourrait être plus pratique.Ailleurs, en Python, par exemple,
~
et$HOME
doivent être étendus par différentes fonctions . Certains autres endroits autorisent les variables et n'autorisent pas d'autres syntaxes de shell comme les caractères génériques ou l'expansion tilde (par exemple~/.pam_environment
, qui a une syntaxe spéciale pour l'expansion des variables). Pourtant, d'autres endroits autorisent l'expansion du tilde comme exception (par exemple, systemd ), mais interrogent la base de données passwd directement au lieu de l'utiliser$HOME
.la source
$HOME
, mais vous ne pouvez pas (directement) changer la valeur de~
.$HOME
et~
ne pas faire référence à la même chose - ils le font normalement par défaut - et ensuite vous attribuez délibérément à la variable d'environnement pour qu'ils ne se réfèrent pas à la même chose. C'est une bonne démonstration, mais inutilement déroutante.$ HOME / est plus susceptible de fonctionner dans POSIX.2 Bourne / bin / sh standard car l'extension tilde est une extension trouvée dans BSD csh tcsh GNU bash et autres.
Si vous voulez écrire des scripts portables sur busybox ou dash ou BSD sh, investissez dans les lettres supplémentaires de peur que vous ne plantiez avec ~ /: Aucun fichier ou répertoire de ce type sur certains systèmes.
Je trouve également $ HOME / plus lisible.
la source
$HOME
et utilisent rarement~
. Mon ancien moi le savait probablement.