【问题标题】:bash: Apostrophe in pathbash:路径中的撇号
【发布时间】:2026-01-10 13:00:01
【问题描述】:

在 Mac OS X (bash 4.2) 上,我尝试 cd 进入路径中带有撇号的文件夹:

cd "~/Documents/study/new/Beej's Guide to Unix IPC_code/examples"

然后我得到了

-bash: cd: ~/Documents/study/new/Beej's Guide to Unix IPC_code/examples: No such file or directory

我也尝试像这样转义撇号:

cd "~/Documents/study/new/Beej\'s Guide to Unix IPC_code/examples"

结果:

-bash: cd: ~/Documents/study/new/Beej\'s Guide to Unix IPC_code/examples: No such file or directory

唯一对我有用的是在没有双引号的情况下很难转义空格和撇号:

cd ~/Documents/study/new/Beej\'s\ Guide\ to\ Unix\ IPC_code/examples

在这种情况下,有没有办法完全避免硬转义?

【问题讨论】:

  • 很奇怪。我可以使用 bash 3.2.48(OS X 10.8.3 上的默认设置)来做到这一点。在自动完成期间,即使我使用了双引号,撇号对我来说也很难逃脱。你确定你的cd 命令看起来就是这样吗?另外:你确定它是撇号而不是反引号或类似的东西吗?
  • 您引用的是波浪号字符。这行不通。

标签: bash path escaping


【解决方案1】:

波浪号 (~) 不会在引号内展开,因此您需要将其留在引号外。其中任何一个都可以:

cd ~/"Documents/study/new/Beej's Guide to Unix IPC_code/examples"
cd ~/Documents/study/new/"Beej's Guide to Unix IPC_code"/examples
cd ~/Documents/study/new/Beej"'s Guide to Unix "IPC_code/examples

【讨论】:

    【解决方案2】:

    你有哪个版本的 bash ?就像@MaxLeske 所说,它适用于 3.2.48 版本的自动完成功能。

    删除双引号内的波浪号 (~) 字符。而是给出一个完整的路径。

    cd "/Users/<uname>/Documents/study/new/Beej's Guide to Unix IPC_code/examples"
    

    【讨论】: