112

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

文件名:cdcode

文件内容:

cd ~/My Code

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

顺便说一句,我已经尝试过cd "~/My Code"cd "~/My\ Code"但这些都不起作用。

4

14 回答 14

94

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

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

这里没有引用波浪号,所以波浪号扩展仍然会运行。

cd "$HOME/My Code"

您可以在双引号字符串中扩展环境变量;这基本上就是波浪号扩展正在做的事情

cd ~/My\ Code

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

于 2009-02-26T05:23:12.740 回答
48

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

x="test\ me"  
eval cd $x

\双引号文本常量和eval之前的组合cd使它像魅力一样工作!

于 2010-06-13T15:52:57.967 回答
14

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

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

最简单的方法只是双引号你的变量在前面的答案中指出:

cd "$yourPathWithBlankSpace"

2. 利用eval.

根据this answer Unix command to escape spaces你可以去掉空格然后使用eval,像这样:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped
于 2017-12-03T10:43:58.627 回答
10
cd ~/My\ Code

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

于 2009-02-26T04:55:00.813 回答
10

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

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

您不能使用:

cd ~"/My Code"

第一个有效,因为 shell 将 ~/ 扩展为 $HOME/,然后在没有双引号的情况下添加 My Code。第二个失败,因为没有一个名为 ' "' (双引号)的用户~"可以映射到。

于 2009-02-26T05:22:44.943 回答
7

这将做到:

cd ~/My\ Code

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

例如,我不得不将它用于最近的一个项目:

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

我希望这会有所帮助。

于 2020-07-08T20:19:14.963 回答
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 中运行脚本,尽管大多数人会为此使用别名。这些空间可能是一条红鲱鱼。

于 2009-02-26T04:57:52.863 回答
3

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

于 2015-06-10T06:06:25.603 回答
2

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

cd ~/My\ Code

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

$ . cdcode

(只是 '.' 而不是 './')

于 2009-02-26T05:02:12.963 回答
2

使用双引号

go () 
{ 
    cd "$*"
}
于 2014-05-15T15:31:08.733 回答
2

这样做的非常简单的方法是 -

 $ cd My\ Folder

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

$dir
My\ Folder
New\ Folder
于 2017-04-28T10:04:52.373 回答
2

使用单引号,例如:

myPath=~/'my dir'

cd $myPath
于 2018-05-24T01:37:05.787 回答
1

I had a similar problem now were I was using a bash script to dump some data. I ended up creating a symbolic link in the script folder with out any spaces in it. I then pointed my script to the symbolic link and that works fine.

To create your link. ln -s [TARGET DIRECTORY OR FILE] ./[SHORTCUT]

Mau or may not be of use.

于 2010-05-13T09:20:19.030 回答
-1

我阅读了所有这些内容,但它们似乎不适用于 macOS Monterey。然后我将标题从更改#!/bin/sh#!/bin/zsh,这似乎起到了作用。

于 2022-01-05T11:28:53.040 回答