C'est vrai dans une certaine mesure.
-
$HOME
est une expression pour l'expansion de la variable d'environnement HOME
-
~
(tilde) est un composant séparé d'expansion du shell voir note de bas de page
Lorsqu'elle est utilisée comme argument de commande et qu'elle est séparée des autres chaînes de caractères, $HOME
y ~
sont généralement équivalentes.
Mais il y a des cas où ils diffèrent :
-
si la chaîne contenant l'un ou l'autre est citée, par exemple :
# echo "My home directory is $HOME"
My home directory is /Users/techraf
# echo "My home directory is ~"
My home directory is ~
-
s'ils sont concaténés à une chaîne de caractères, par exemple :
-
dd if=${HOME}/source_file of=${HOME}/destination_file
fonctionnera.
Le shell passera des arguments if=/Users/techraf/source_file
y of=/Users/techraf/destination_file
contenant un chemin d'accès valide au dd
commandement.
-
dd if=~/source_file of=~/destination_file
ne fonctionne pas
Le shell passera des arguments if=~/source_file
y of=~/destination_file
à la dd
et il signalera une erreur car il n'interprète pas la commande ~
.
note de bas de page :
En effet ~
est par défaut remplacé par la valeur de HOME
mais si HOME
est vide, il est résolu en un répertoire personnel :
# echo $HOME
/Users/techraf
# export HOME=/dummy
# echo $HOME
/dummy
# echo ~
/dummy
# unset HOME
# echo $HOME
# echo ~
/Users/techraf
Desde man bash
:
Tilde Expansion
Si un mot commence par un caractère tilde non cité (`~'), tous les caractères précédant la première barre oblique non citée (ou tous les caractères, s'il n'y a pas de barre oblique non citée) sont considérés comme un préfixe tilde. Si aucun des caractères du tilde-préfixe n'est cité, les caractères du tilde-préfixe qui suivent le tilde sont traités comme un nom de connexion possible. Si ce nom de connexion est une chaîne nulle, le tilde est remplacé par la valeur du paramètre shell HOME.
Si HOME n'est pas défini, le répertoire personnel de l'utilisateur qui exécute le shell est substitué. Sinon, le préfixe tilde est remplacé par le répertoire de base associé au nom de connexion spécifié.