$HOME
そして~
通常は同じものを参照してください。つまり、一般的な形式の「/ home / userName」である「user's home」ディレクトリへのパスです。
ある場合、これらが同じディレクトリを参照しないのはいつですか?
$HOME
そして~
通常は同じものを参照してください。つまり、一般的な形式の「/ home / userName」である「user's home」ディレクトリへのパスです。
ある場合、これらが同じディレクトリを参照しないのはいつですか?
回答:
両方とも、現在のユーザーのホームフォルダーである同じフォルダー$HOME
を~
指しますが、どちらも非常に異なるものです。
$HOME
現在のユーザーのホームフォルダーを含むように設定されている環境変数です。~
は、シェル拡張シンボルです。つまり、実際のコマンドが実行される前に処理されるシンボルの1つです。~
単独で$ HOMEの値に展開されます。~nemo
userのホームディレクトリに展開しますnemo
。シェル展開記号は、実際のコマンドを作成するためにシェルによって処理/解釈される文字(または文字のペア)です。シェル展開シンボルの別の例は、*
ファイル名を展開するために使用されます。~
$ HOME、またはWindowsでは%APPDATA%に展開されます。定義されていない場合は、「パスワードデータベース」でパスを検索します(通常はを意味し/etc/passwd
ますが、LDAPまたは他のデータソースである可能性があります)。約20年前には、一部のマシンでは$ HOMEが設定されていないかもしれないが~
、何かに拡張されることが保証されていると警告されていたかもしれません。
~
展開されます。そして、cmd.exeでは、展開しません。$HOME
$HOMEPATH
$APPDATA
~
HOME
(でOSの概念、環境変数であるSHの例とのセットのためのシェルexport
またはdeclare -x
()ではなく、シェル変数は、シェルに完全に依存しますが、中に定義うちのshシェル、それは通常で設定されているfoo=value
かとset
か、いくつかの他に方法)。
~
定義上、単語の先頭から開始する必要があるチルダプレフィックスの一部としてのみ展開されます。また、以前はグロビングパターンの一部であったため、~
二重引用符内では機能しません。そのため、"~"
またはa~b
そのままのリテラル値に~
なります。
単一~
(またはに~
続く/
)は、現在のユーザーの自宅に展開されます。
$ echo ~/.ssh
/home/user/.ssh
の~
後にユーザー名が続くと、そのユーザーのホームフォルダーに展開されます。
$ echo ~root/.ssh
/root/.ssh
Aは、~
続いて+
又は-
および任意の数の要素を拡大するディレクトリスタック。
$ cd /etc
$ echo ~+0
/etc
$HOME
は、~
代わりに変数の構文規則に従うsingle と同等です。たとえば、二重引用符内で展開し、設定解除でき、文字列操作オペランドを適用できます。
これは、拡張の内容に大きく依存します。bashでは~
、引用符で囲まれていなくても、ファイル名の展開や単語の分割をトリガーせずにホームディレクトリを取得する便利な方法です。例えば:
$ 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
。
$HOME
(直接)変更できないことです~
。
$HOME
し~
ないかを尋ねました-通常はデフォルトで行う-そして、あなたは意図的に同じものを参照しないように環境変数に割り当てます。これは良いデモンストレーションですが、不必要に紛らわしいです。
チルダ展開はBSD csh tcsh GNU bashなどで見られる拡張機能であるため、$ HOME /は標準POSIX.2 Bourne / bin / shで動作する可能性が高くなります。
busybox、dash、またはBSD shに移植可能なスクリプトを作成する場合は、〜/:でクラッシュしないように追加の文字に投資してください。特定のシステムにはそのようなファイルやディレクトリはありません。
また、$ HOME /の方が読みやすいと思います。
$HOME
、ほとんど使用しない理由~
です。私の前の自己はおそらくこれを知っていました。
~
$ HOMEがいない間に依存シェルです。