9

У меня есть имя папки с пробелом между словами. Я использую команду 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

2 ответа2

27

Причина, по которой он не работает, заключается в том, что оболочка разделяет аргументы на пустое пространство и поэтому считает, что вы вызываете cd с двумя аргументами October и Fall . Избегайте пробелов с помощью \ вроде этого:

cd October\ Fall

Другой способ - поместить его в одинарные или двойные кавычки, как это

cd 'October Fall'
cd "October Fall"

Или просто перетащите папку в терминал.

Но почему бы вам просто не набрать несколько символов и нажать Tab для автозаполнения?

10

Оболочка выполняет разбиение слов по аргументам перед передачей их в указанную вами команду. Это означает, что она берет строку (или, в некоторых случаях, строки) и разделяет ее на несколько слов по умолчанию в пробелах, табуляциях и переводах строки.

Как упоминал Лю Вон Фук, обратные косые черты и одинарные кавычки могут использоваться для предотвращения разбиения слов на отдельные символы или все, что между ними, соответственно. Двойные кавычки также работают:

cd "October Fall"

В данном конкретном случае ' ведут себя одинаково, но у них есть различия.

' отключает всю интерпретацию специальных символов (даже \), но не может содержать ' . msgstr " только отключает разделение слов и расширение имени файла (расширение имени файла - это такие вещи, как 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"

Что еще нужно иметь в виду, это то, что многие современные оболочки предлагают завершить вкладку. И Bash, и Zsh (возможно, также Ksh, но я его не проверял) могут расширять часть имени каталога до его полного имени, в комплекте с безопасным экранированием через \ s. Так что cd Octobers<tab> становится cd Octobers\'\ \$HOME . Возможно, вам придется нажимать вкладку несколько раз, если есть несколько совпадений. Кроме того, в вашей оболочке может быть не включено завершение табуляции, проверьте документацию по вашей оболочке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .