この場合、なぜチルダがホーム フォルダーとして認識されないのでしょうか?

この場合、なぜチルダがホーム フォルダーとして認識されないのでしょうか?

これは機能しません:

$ 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、ここでは何が起こっているのでしょうか?

答え1

二重引用符を使用しても、引用符で囲むとチルダの展開は抑制されます。

~に使えるホームディレクトリへのパスとして文脈上チルダ展開~実行されます。.または..~実際には、ファイルシステム内に、ホーム ディレクトリの別名として機能するエントリは存在しません。

~が単独で、またはパスの最初の要素として現れると、シェルはそれを絶対パスホームディレクトリに。ただし、~引用符で囲まれている場合はこの限りではありません。二重引用符より弱い形態を提供する引用よりも一重引用符これは他の種類の拡大、 のようなパラメータ拡張(これは を展開します$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。)


参考文献:

関連情報