如何在 OS X 上的终端中写入空间?

Ale*_*tev 17 terminal bash whitespace command-line-arguments macos

我有一个文件夹名称,单词之间有一个空格。我试图用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
Run Code Online (Sandbox Code Playgroud)

phu*_*clv 38

它不起作用的原因是因为 shell 在空格上拆分参数,因此认为您cd使用两个参数OctoberFall. \像这样逃避空白:

cd October\ Fall
Run Code Online (Sandbox Code Playgroud)

另一种方法是把它放在这样的单引号或双引号中

cd 'October Fall'
cd "October Fall"
Run Code Online (Sandbox Code Playgroud)

或者只是将文件夹拖放到终端中。

但是为什么不直接输入几个字符然后按Tab自动完成呢?

  • 你应该使用反斜杠,而不是斜杠 (3认同)

8bi*_*ree 12

shell 在参数传递给您指定的命令之前对参数执行分。这意味着它需要一行(或者,在某些情况下,行)并将它分成几个单词,默认情况下是空格、制表符和换行符。

正如 L?u V?nh Phúc 所提到的,反斜杠和单引号可分别用于防止对单个字符或它们之间的所有字符进行分词。双引号也有效:

cd "October Fall"
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,'"相同的行为,但他们确实有差异

'禁用所有特殊字符解释(甚至\),但不能包含'. "仅禁用分词和文件名扩展(文件名扩展类似于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
Run Code Online (Sandbox Code Playgroud)

请注意,'并且"(默认情况下)不会导致自己分词,因此,尽管很乱,但对您有用:

cd "Oct"'ober F'"all"
Run Code Online (Sandbox Code Playgroud)

如果您有诸如名为Octobers' $HOME. 在'它会打破单对'报价,和里面"的报价,$HOME将扩大到你的主目录。但是这些组合(以及许多其他组合)中的任何一个都可以安全地工作:

cd Octobers\'\ \$HOME
cd "Octobers' "'$HOME'
cd "Octobers' "\$HOME
cd "Octobers' \$HOME"
Run Code Online (Sandbox Code Playgroud)

要记住的另一件事是,许多现代 shell 都提供制表符补全功能。Bash 和 Zsh(也可能是 Ksh,但我还没有测试过)都可以将目录名称的一部分扩展为其全名,并通过\s进行安全转义。于是cd Octobers<tab>变成cd Octobers\'\ \$HOME。如果有多个匹配项,您可能需要多次按 Tab。此外,您的 shell 可能默认没有启用 tab 补全,请查看您的 shell 文档。