如何cd到目录名带空格的目录?

问题描述 投票:0回答:14

我在 macOS X 上使用 Bash,我想创建一个简单的可执行脚本文件,该文件在运行时会更改为另一个目录。但是,该目录的路径中有空格。你到底是怎么做到的?这就是我所拥有的...

文件名称:

cdcode

文件内容:

cd ~/My Code

现在,这不是一个长路径名,但我的实际路径名有五个目录深,其中四个目录在路径中包含空格。

顺便说一句,我尝试过

cd "~/My Code"
cd "~/My\ Code"
,但这些都不起作用。

bash escaping
14个回答
107
投票

当您双引号路径时,您将停止波浪号扩展。所以有几种方法可以做到这一点:

cd ~/"My Code"
cd ~/'My Code'

此处未引用波浪号,因此波浪号扩展仍将运行。

cd "$HOME/My Code"

您可以在双引号字符串内扩展环境变量;这基本上就是波形符展开的作用

cd ~/My\ Code

您还可以使用反斜杠转义特殊字符(例如空格)。


50
投票

我在此页面找到了以下解决方案:

x="test\ me"  
eval cd $x

双引号文本常量中的

\
eval
之前的
cd
的组合使其工作起来就像一个魅力!


22
投票

在解决同样的问题后,我尝试了两种有效的不同解决方案:

1.对变量使用双引号 (
""
)。

最简单的方法只需将变量加双引号即可,如前面的答案所示:

cd "$yourPathWithBlankSpace"

2.利用
eval

根据这个答案Unix命令转义空格你可以去掉空格然后使用

eval
,像这样:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped

11
投票

您可以使用以下任何一种:

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

您不能使用:

cd ~"/My Code"

第一个方法有效,因为 shell 将 ~/ 扩展为 $HOME/,然后在不带双引号的情况下添加“我的代码”。第二个失败,因为没有名为“

"
”(双引号)的用户可供
~"
映射到。


10
投票
cd ~/My\ Code

似乎对我有用...如果删除引号但保留斜杠不起作用,您可以发布一些示例代码吗?


7
投票

这样就可以了:

cd ~/My\ Code

我必须使用它来处理存储在 iCloud Drive 中的文件。您不想使用双引号 ("),因为它必须是绝对路径。换句话说,您不能将双引号与波形符 (~) 组合在一起。

举例来说,我必须将其用于最近的项目:

cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project

希望有帮助。


4
投票

单个反斜杠对我有用:

ry4an@ry4an-mini:~$ mkdir "My Code"

ry4an@ry4an-mini:~$ vi todir.sh

ry4an@ry4an-mini:~$ . todir.sh 

ry4an@ry4an-mini:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

您确定问题不是您的 shell 脚本正在更改其子 shell 中的目录,但完成后您又回到了主 shell(和原始目录)?我通过使用避免了这种情况。在当前 shell 中运行脚本,尽管大多数人只会为此使用别名。这些空间可能会转移注意力。


2
投票

在 Linux 下工作时,以下语法是正确的:

cd ~/My\ Code

但是,当您执行文件时,请使用以下语法:

$ . cdcode

(只是“.”而不是“./”)


2
投票

使用双引号

go () 
{ 
    cd "$*"
}

2
投票

执行此操作的非常简单的方法是 -

 $ cd My\ Folder

在 bash 中,运行 DIR 命令,在结果中你会看到它们之间有空格的文件夹或路径名已被写入结果中,如下 -

$dir
My\ Folder
New\ Folder

2
投票

使用单引号,例如:

myPath=~/'my dir'

cd $myPath

2
投票

我读了所有这些,它们似乎不适用于 macOS Monterey。然后我将标题从

#!/bin/sh
更改为
#!/bin/zsh
,这似乎成功了。


1
投票

在脚本中避免使用 ~;使用 $HOME 代替。


0
投票

我现在遇到了类似的问题,我正在使用 bash 脚本转储一些数据。我最终在脚本文件夹中创建了一个符号链接,其中没有任何空格。然后我将我的脚本指向符号链接,效果很好。

创建您的链接。 ln -s [目标目录或文件] ./[快捷方式]

Mau 或可能没有用。

© www.soinside.com 2019 - 2024. All rights reserved.