Оболочка выполняет разбиение слов по аргументам перед передачей их в указанную вами команду. Это означает, что она берет строку (или, в некоторых случаях, строки) и разделяет ее на несколько слов по умолчанию в пробелах, табуляциях и переводах строки.
Как упоминал Лю Вон Фук, обратные косые черты и одинарные кавычки могут использоваться для предотвращения разбиения слов на отдельные символы или все, что между ними, соответственно. Двойные кавычки также работают:
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
. Возможно, вам придется нажимать вкладку несколько раз, если есть несколько совпадений. Кроме того, в вашей оболочке может быть не включено завершение табуляции, проверьте документацию по вашей оболочке.