Antworten:
Es ist bis zu einem gewissen Grad wahr.
$HOME ist ein Ausdruck für die Erweiterung der Umgebungsvariablen HOME~(Tilde) ist eine separate Shell-Erweiterungskomponente,
siehe FußnoteWenn es als ein Befehlsargument verwendet und in der Trennung von anderen Saiten, $HOMEund ~ist in der Regel gleich.
Es gibt jedoch Fälle, in denen sie sich unterscheiden:
Wenn die Zeichenfolge, die eines von beiden enthält, in Anführungszeichen gesetzt ist, zum Beispiel:
# echo "My home directory is $HOME"
My home directory is /Users/techraf
# echo "My home directory is ~"
My home directory is ~
Wenn sie mit einer Zeichenfolge verknüpft sind, zum Beispiel:
dd if=${HOME}/source_file of=${HOME}/destination_file wird funktionieren.
Die Shell übergibt Argumente if=/Users/techraf/source_fileund of=/Users/techraf/destination_fileenthält einen gültigen Pfad zum ddBefehl.
dd if=~/source_file of=~/destination_file wird nicht funktionieren
Shell übergibt Argumente if=~/source_fileund of=~/destination_filean den ddBefehl und meldet einen Fehler, da dieser nicht interpretiert wird ~.
Fußnote:
Tatsächlich ~wird es standardmäßig durch den Wert von ersetzt HOME, aber wenn HOMEes leer ist, wird es in ein Ausgangsverzeichnis aufgelöst:
# echo $HOME
/Users/techraf
# export HOME=/dummy
# echo $HOME
/dummy
# echo ~
/dummy
# unset HOME
# echo $HOME
# echo ~
/Users/techraf
Von man bash:
Tilde-Erweiterung
Wenn ein Wort mit einem nicht zitierten Tilde-Zeichen (`~ ') beginnt, werden alle Zeichen vor dem ersten nicht zitierten Schrägstrich (oder alle Zeichen, wenn kein nicht zitierter Schrägstrich vorhanden ist) als Tilde-Präfix betrachtet. Wenn keines der Zeichen im Tilde-Präfix in Anführungszeichen gesetzt wird, werden die Zeichen im Tilde-Präfix nach der Tilde als möglicher Anmeldename behandelt. Wenn dieser Anmeldename die Nullzeichenfolge ist, wird die Tilde durch den Wert des Shell-Parameters HOME ersetzt.
Wenn HOME nicht festgelegt ist, wird stattdessen das Home-Verzeichnis des Benutzers ersetzt, der die Shell ausführt. Andernfalls wird das Tilde-Präfix durch das Home-Verzeichnis ersetzt, das dem angegebenen Anmeldenamen zugeordnet ist.
unset HOMEin anderen Shells, wie ksh, zsh, or dashdann echo ~, nicht auf den Pfad Ihres Home-Ordners erweitern.
kshVerhalten von @ fd0 scheint lustig zu sein - es wird nur in den Benutzernamen aufgelöst, wenn no HOMEdefiniert ist.
cd ~username. In einem Skript gelangen cd ~"$(id -un)"Sie zum Home-Ordner des Benutzers, unabhängig davon, auf was HOME eingestellt ist.
$HOMEist bei der Anmeldung in einem frühen Stadium ~verfügbar, wenn es nicht verfügbar ist. Der Grund ist, dass dies $HOMEdurch die Systemumgebung definiert wird und ~eine Shell-Verknüpfung ist. Aus diesem Grund $HOMEwird Shell-Scripting bevorzugt.
$parameter) auflöst (Zitat: " Frühes Anmelden ", damit sie " für Shell-Skripte bevorzugt " wird), aber noch nicht ~?