оболочка выполняет разбиение on аргументы перед передачей их в указанную команду. Это означает, что он берет строку (или, в некоторых случаях, строки) и разбивает ее на несколько слов, по умолчанию в пробелах, вкладках и новых строках.
Как упоминалось в Lưu Vĩnh Phúc, обратные косые черты и одинарные кавычки могут использоваться для предотвращения разделения слов на отдельные символы или все между ними, соответственно. Двойные кавычки также работают:
cd "October Fall"
In это частный случай,'
и "
ведут себя одинаково, но у них есть различия.
'
отключает интерпретацию всех специальных символов (даже \
), но не может содержать '
. "
отключает только разделение слов и расширение имени файла (расширение имени файла-это такие вещи, как ls *.mp3
перечислить все файлы с именами, оканчивающимися на .mp3
. The *
вызывает расширение имени файла). Поскольку "
позволяет некоторые расширения аргумента, это полезно, если, например, у вас есть имя файла с пробелом внутри переменной:
$ 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
. The '
в нем разобьется одна пара '
цитирование, а внутри "
кавычки $HOME
расширится до вашего домашнего каталога. Но любая из этих комбинаций (и многие другие) будет работать безопасно:
cd Octobers\'\ $HOME
cd "Octobers' "'$HOME'
cd "Octobers' "$HOME
cd "Octobers' $HOME"
что - то еще, что нужно иметь в виду, так это то, что многие современные оболочки предлагают завершение вкладки. И Bash, и Zsh (возможно, Ksh, но я его не тестировал) могут расширить часть имени каталога до его полного имени, в комплекте с безопасным экранированием через \
s. Так cd Octobers<tab>
становится cd Octobers\'\ $HOME
. При наличии нескольких совпадений может потребоваться нажать клавишу tab несколько раз. Кроме того, ваша оболочка может не иметь вкладки завершение включено по умолчанию, проверьте документацию оболочки.