AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1032370
Accepted
B.Tanner
B.Tanner
Asked: 2018-05-06 03:24:08 +0800 CST2018-05-06 03:24:08 +0800 CST 2018-05-06 03:24:08 +0800 CST

为什么我不能 cd 到带引号的波浪号 ('~')?

  • 772

编写我的第一个脚本,所以我确定这是一个基本问题,但有人可以向我解释为什么我可以:

cd ~
cd bin
cd ~/bin
cd 'bin'

但不是

cd '~'
cd '~/bin'

我需要cd一个目录路径,其中一个目录名称中有一个空格,所以我需要引号(它是Program Fileswine下的Windows)。我可以用两个命令绕过它cd,但为什么我不能加上~引号?

如果我输入cd '~'(或cd "~")我得到:

bash: cd: ~: No such file or directory
command-line bash
  • 4 4 个回答
  • 8683 Views

4 个回答

  • Voted
  1. Best Answer
    Byte Commander
    2018-05-06T03:36:11+08:002018-05-06T03:36:11+08:00

    正如@karel 在他的回答中指出的那样,~是一个特殊字符,并由 Bash 扩展到当前用户的主目录中。请参阅Bash 的“波浪号扩展”手册man bash,或在手册页 ( )中搜索标题“波浪号扩展” 。

    任何类型的引用都~可以防止这种波浪扩展。


    要回答您有关如何仍将其用于cd名称中带有空格的目录的问题,有几种选择:

    • 省略引号并使用反斜杠转义空格:

      cd ~/foo/spaces\ are\ cool/bar
      
    • 引用路径的其余部分,但在波浪号和第一个斜杠周围省略它们:

      cd ~/"foo/spaces are cool/bar"
      

      如您所见,您可以在 Bash 中连接带引号和不带引号的字符串,只需将它们彼此相邻编写,中间不带任何空格。

    • 使用环境变量$HOME而不是波浪号,它仍然在“双引号”(但不是“单引号”)内扩展:

      cd "$HOME/foo/spaces are cool/bar"
      
    • 84
  2. karel
    2018-05-06T03:25:56+08:002018-05-06T03:25:56+08:00

    ~ 是一个特殊字符,shell 将其解释为登录用户的主目录。'~' 被 shell 解释为文字 ~ 字符,而不是登录用户的主目录,因为将字符串包含在两个单引号字符内会导致该字符串被解释为文字文本字符串。

    • 18
  3. dessert
    2018-05-06T03:36:51+08:002018-05-06T03:36:51+08:00

    这是一个bash称为波浪号扩展的功能。引用man bash:

    如果单词以不带引号的波浪号字符(`~') 开头,则第一个不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)都被视为波浪号前缀。如果波浪号前缀中没有任何字符被引用,波浪号后面的波浪号前缀中的字符将被视为可能的登录名。如果此登录名是空字符串,波浪号将替换为 shell 参数 HOME 的值。如果 HOME 未设置,则替换执行 shell 的用户的主目录。

    为了使扩展起作用,波浪号字符~需要不加引号,否则该字符将按字面意思表示,并且cd如果~当前目录中没有命名的目录则失败。有关引用 in 的解释,请参阅这个详尽的答案bash。如果您需要引用部分路径,则可以:

    1. 至少引用需要用单引号引用的字符,例如

      ~/dir' 'with' 'spaces/
      

      或者

      ~/'dir with spaces/'
      
    2. 至少引用需要用双引号引用的字符,例如

      ~/dir" "with" "spaces/
      

      或者

      ~/"dir with spaces/"
      
    3. 仅引用需要用反斜杠引用的字符,例如

      ~/dir\ with\ spaces/
      

    波浪号扩展有一些更有趣的功能,例如:

    • ~+展开为 的值PWD,即当前工作目录
    • ~-展开为 的值OLDPWD,即前一个工作目录
    • ~john展开到与登录名“john”关联的主目录
    • 16
  4. WinEunuuchs2Unix
    2018-05-09T03:48:30+08:002018-05-09T03:48:30+08:00

    echo使用命令探索

    探索 bash 中的工作原理的最简单方法是使用echo命令。在~使用这个的情况下:

    $ echo ~
    /home/rick
    $ echo '~'
    ~
    $ echo "~"
    ~
    $ echo `~`
    bash: /home/rick: Is a directory
    

    如您所见,当您使用单引号或在其周围使用双引号时,~它会按字面意思解释为字符串,而不是扩展为变量。当您使用反引号 (`) 时,它会作为命令执行并生成错误消息。

    • 3

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve