これは機能しません:
$ ls "~/.wine/drive_c/tools/Family Tree v2.0"
ls: cannot access '~/.wine/drive_c/tools/Family Tree v2.0': No such file or directory
しかし、これは:
$ ls "/home/daniel/.wine/drive_c/tools/Family Tree v2.0"
Dossiers Dossiers_orig Infos.opt Racines.exe 'Register OCX.bat' racines.CNT
Dossiers-2019.11.03-11.46.tar.gz Html REGSVR32.exe Racines.hlp Uninst.isu readme.txt
~
が/home/daniel
と同じであると仮定すると、ここで何が起こっているのでしょうか。
~
は、 チルダ展開 が実行されるコンテキストで使用できます ホームディレクトリへのパスとして 。 ~
は .
または..
とは異なります。実際には、ホームディレクトリの代替名として機能する~
という名前のエントリがファイルシステムにありません。
~
が単独で、またはパスの最初のコンポーネントとして表示される場合、シェルはそれを 絶対パス に展開してホームディレクトリにします。しかし、これは~
が引用されている場合には起こりません。 二重引用符一重引用符 よりも弱い形式の 引用 を提供します。これは、他の種類の 展開 にとって重要です、 パラメータ展開 ($HOME
を展開する)など。しかし、二重引用符でさえもチルド展開を抑制します。
したがって、このコマンドでは~
は展開されておらず、引用されています。
ls "~/.wine/drive_c/tools/Family Tree v2.0"
幸いなことに、一部が引用されている部分と引用されていない部分がある引数を書き込むことができます。したがって、引用符の前に~/
を付けても、残りを引用できます。
ls ~/".wine/drive_c/tools/Family Tree v2.0"
または、パラメーターの展開は二重引用符内でも実行されますが、単一引用符内では実行されないため、以下を使用できます。
ls "$HOME/.wine/drive_c/tools/Family Tree v2.0"
(技術的には異なります。つまり、HOME
環境変数が設定されていなくても、一部のシェルはホームディレクトリが何であるかを理解し、~
をbash
はそのようなシェルの1つですが、HOME
を設定解除することはまれであり、お勧めできません。
参考文献: