使用bash脚本cd到pathname中包含空格的目录

84 bash escaping

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

文件名称: cdcode

文件内容:

cd ~/My Code
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,我已经试过cd "~/My Code"cd "~/My\ Code"和这些都不奏效.

der*_*ert 77

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

cd ~/"My Code"
cd ~/'My Code'
Run Code Online (Sandbox Code Playgroud)

这里没有引用波浪号,因此波浪扩展仍然会运行.

cd "$HOME/My Code"
Run Code Online (Sandbox Code Playgroud)

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

cd ~/My\ Code
Run Code Online (Sandbox Code Playgroud)

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

  • 你甚至可以cd~/My''Code,但是当你用反斜杠代替它时,这将是愚蠢的 (3认同)

小智 36

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

x="test\ me"  
eval cd $x
Run Code Online (Sandbox Code Playgroud)

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

  • 在 OS X 上,如果没有 `eval`,我无法获得其他/先前的答案。 (3认同)

And*_*gan 10

cd ~/My\ Code
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*ler 9

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

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"
Run Code Online (Sandbox Code Playgroud)

你不能使用:

cd ~"/My Code"
Run Code Online (Sandbox Code Playgroud)

第一个工作原因是shell将〜/扩展到$ HOME /,然后在没有双引号的情况下在我的代码上添加.第二个失败是因为没有一个名为' "'(双引号)的用户~"要映射到.


小智 6

这将做到:

cd ~/My\ Code
Run Code Online (Sandbox Code Playgroud)

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

举例来说,我不得不在最近的一个项目中使用它:

cd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Documents/Documents\ -\ My\ iMac/Project
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。


Han*_*L90 5

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

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

最简单的方法是按照前面的答案中的双引号将变量引起来:

cd "$yourPathWithBlankSpace"
Run Code Online (Sandbox Code Playgroud)

2.利用eval

根据此答案Unix命令来转义空格,您可以删除空格然后使用eval,如下所示:

yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped
Run Code Online (Sandbox Code Playgroud)