这不起作用:
$ 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
,这里发生了什么?
引号,即使使用双引号,也会抑制波浪号扩展。
~
可以在执行波浪号扩展的上下文中用作主目录的路径。不喜欢或。实际上,您的文件系统中没有任何条目可以用作主目录的备用名称。~
.
..
~
当
~
单独出现或作为路径的第一个组件出现时,您的 shell 会将其扩展为您的主目录的绝对路径。~
但是在引用时不会发生这种情况。双引号提供了比单引号更弱的引用形式,这对其他一些扩展很重要,例如参数扩展(扩展)。但即使是双引号也会抑制波浪扩展。$HOME
因此
~
在此命令中没有展开,它被引用:幸运的是,允许编写一个参数,其中一些部分被引用,而一些部分没有。所以你可以放在
~/
引号之前,仍然引用其余部分:或者,由于参数扩展甚至在双引号中执行 - 但不是在单引号中 - 您可以使用:
(从技术上讲,这是不同的,因为即使
HOME
未设置环境变量,一些 shell 仍会尝试找出您的主目录并扩展~
到它 - 并且bash
是这样的 shell。但是HOME
取消设置既罕见又不明智。 )进一步阅读: