O shell realiza divisão de palavras nos argumentos antes de passá-los para o comando especificado. Isso significa que ele pega a linha (ou, em alguns casos, as linhas) e o separa em várias palavras, por padrão em espaços, tabulações e novas linhas.
Como Lưu Vĩnh Phúc mencionou, barras invertidas e aspas simples podem ser usadas para evitar a divisão de palavras em caracteres únicos ou tudo entre eles, respectivamente. Aspas duplas também funcionam:
cd "October Fall"
Neste caso específico, '
e "
se comportam de maneira idêntica, mas eles têm diferenças .
'
desativa todas as interpretações de caracteres especiais (até \
), mas não pode conter '
. "
apenas desativa a divisão de palavras ea expansão do nome do arquivo (a expansão do nome do arquivo é como ls *.mp3
para listar todos os arquivos com nomes terminados em .mp3
. O *
aciona a expansão do nome do arquivo aqui). Como "
permite algumas expansões de argumentos, é útil se, por exemplo, você tiver um nome de arquivo com um espaço dentro de uma variável:
$ 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
Observe que '
e "
não (por padrão) fazem com que a palavra seja dividida, por isso, apesar de ser confuso, funcionaria para você:
cd "Oct"'ober F'"all"
Isso é útil se você tiver algo como um diretório chamado Octobers' $HOME
. O '
dividiria um único par de '
, e dentro de "
quotes, $HOME
será expandido para seu diretório inicial. Mas qualquer uma dessas combinações (e muitas outras) funcionará com segurança:
cd Octobers\'\ \$HOME
cd "Octobers' "'$HOME'
cd "Octobers' "\$HOME
cd "Octobers' \$HOME"
Outra coisa a ter em mente é que muitos shells modernos oferecem conclusão de tabulação. Bash e Zsh (provavelmente também o Ksh, mas eu não testei) podem expandir parte do nome de um diretório para o seu nome completo, completo com escape seguro através de \
s. Então, cd Octobers<tab>
se torna cd Octobers\'\ \$HOME
. Você pode ter que pressionar a guia várias vezes se houver várias correspondências. Além disso, seu shell pode não ter a conclusão da tabulação ativada por padrão, verifique a documentação do seu shell.