我有一个文件夹名称,单词之间有空格。我尝试使用cd
移动到该文件夹,但没有成功。如何在 OS X 上的终端中输入空格?我尝试了以下操作
MacBook-Pro:TestDrop Alexsander$ cd October Fall
-bash: cd: October: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd OctoberFall
-bash: cd: OctoberFall: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October/ Fall
-bash: cd: October/: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October/Fall
-bash: cd: October/Fall: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October-Fall
-bash: cd: October-Fall: No such file or directory
MacBook-Pro:TestDrop Alexsander$ cd October_Fall
答案1
它不起作用的原因是 shell 在空格上拆分参数,因此认为你使用cd
两个参数October
和进行调用。像这样Fall
使用转义空格:\
cd October\ Fall
另一种方法是将其放在单引号或双引号中,如下所示
cd 'October Fall'
cd "October Fall"
或者只需将文件夹拖放到终端即可。
但是为什么不直接输入几个字符然后按下Tab自动完成键呢?
答案2
外壳执行单词拆分在将参数传递给您指定的命令之前,它会对其进行拆分。这意味着它会将一行(或在某些情况下是多行)拆分成几个单词,默认情况下会使用空格、制表符和换行符。
正如 Lưu Vĩnh Phúc 所提到的,反斜杠和单引号分别可用于防止单词拆分到单个字符或它们之间的所有内容。双引号也有效:
cd "October Fall"
在这个特殊情况下,'
和"
的行为相同,但它们确实有差异。
'
禁用所有特殊字符解释(甚至\
),但不能包含'
。"
仅禁用单词拆分和文件名扩展(文件名扩展是ls *.mp3
列出所有以 结尾的文件之类的操作.mp3
。*
此处触发文件名扩展)。 由于"
允许一些参数扩展,因此如果变量中的文件名中有空格,则它很有用:
$ filename=October\ Fall
$ # ^-- Still need a backslash or quoting to prevent word
$ # splitting here, but the backslash/quotes will not be stored
$ cd $filename
bash: cd: October: No such file or directory
$ cd '$filename'
bash: cd: $filename: No such file or directory
$ cd "$filename"
$ pwd
/path/to/October Fall
请注意,'
和"
(默认情况下)不会导致单词拆分,因此,尽管这很混乱,但对您来说还是有用的:
cd "Oct"'ober F'"all"
如果您有一个名为 的目录,这将非常有用Octobers' $HOME
。'
其中的 会破坏一对'
引号,而"
引号内的$HOME
会扩展到您的主目录。但以下任何组合(以及许多其他组合)都可以安全地工作:
cd Octobers\'\ \$HOME
cd "Octobers' "'$HOME'
cd "Octobers' "\$HOME
cd "Octobers' \$HOME"
另外要记住的是,许多现代 shell 都提供制表符补全功能。Bash 和 Zsh(可能还有 Ksh,但我没有测试过)都可以将目录名称的一部分扩展为全名,并通过\
s 进行安全转义。因此cd Octobers<tab>
变成cd Octobers\'\ \$HOME
。如果有多个匹配项,您可能需要多次按制表符。此外,您的 shell 可能默认未启用制表符补全功能,请检查您的 shell 的文档。
答案3
如果您的文件夹或文件名为“自动保存信息”,其中包含“空格”或任何特殊字符。
>> cd Autosave\ Information
您可以借助“\”使用特殊字符,或者您可以告诉终端您给出的名称是一个字符串。
>> cd "Autosave Information"