我在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)
您还可以使用反斜杠转义特殊字符(例如空格).
小智 36
我在这个页面上找到了以下解决方案:
x="test\ me"
eval cd $x
Run Code Online (Sandbox Code Playgroud)
的组合\在一个双引号的文本常量和eval之前cd使它像一个魅力的工作!
And*_*gan 10
cd ~/My\ Code
Run Code Online (Sandbox Code Playgroud)
似乎对我有用...如果删除引号但保留斜线不起作用,你可以发布一些示例代码吗?
您可以使用以下任何一种:
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)
我希望这有帮助。
在遇到相同的问题后,我尝试了两种有效的解决方案:
""在变量中使用双引号()。最简单的方法是按照前面的答案中的双引号将变量引起来:
cd "$yourPathWithBlankSpace"
Run Code Online (Sandbox Code Playgroud)
eval。根据此答案Unix命令来转义空格,您可以删除空格然后使用eval,如下所示:
yourPathEscaped=$(printf %q "$yourPathWithBlankSpace")
eval cd $yourPathEscaped
Run Code Online (Sandbox Code Playgroud)