Como faço para escapar de um nome de subdiretório com um "e" comercial nele?

9

Executando um kornshell e tentando percorrer uma árvore de diretórios. Deseja criar um cd para um subdiretório com o seguinte nome:

 -3ab_&_-3dc.img

Minha pergunta é: COMO preciso escapar do e comercial nesse nome? Eu tentei combinações diferentes de aspas duplas e barras invertidas sem sucesso.

    
por RCinICT 26.03.2013 / 00:18

2 respostas

11

Para o & (ou quase qualquer outro caractere, você tem duas possibilidades simples.

  • Coloque aspas simples ao redor da coisa toda: ' -3ab_&_-3dc.img'
  • Coloque uma barra invertida antes de cada caractere problemático: -3ab_\&_-3dc.img

Existem duas exceções:

  • O método de cotação única não funciona para uma cotação única. A barra invertida não é especial entre aspas simples, portanto você não pode usá-la diretamente. O que você pode fazer é finalizar a sequência de aspas simples, imediatamente usar barra invertida mais aspas simples e reiniciar a aspa simples. Por exemplo, se o nome do diretório for foo'bar\qux : cd 'foo'\''bar\qux' . Você pode se lembrar dessa forma: dentro de aspas simples, '\'' faz uma única citação.
  • O método de barra invertida não funciona para novas linhas: a barra invertida-nova linha é simplesmente ignorada. Você precisa colocar aspas simples em uma nova linha.

Você também pode usar aspas duplas, mas é necessário colocar uma barra invertida antes de alguns caracteres. Aspas simples são mais simples.

Há uma dificuldade adicional aqui, que é que o nome do diretório começa com um traço. Esse caractere informa o comando cd (como quase todos os comandos) que uma opção segue. O traço não é especial para o shell, apenas para o comando, portanto, as cotações não afetarão isso. Você tem duas maneiras de passar um argumento que começa com um traço para um comando sem que seja interpretado como uma opção:

  • Encontre outra maneira de expressar esse argumento. Para um nome de arquivo, adicionar ./ na frente ainda designa o mesmo arquivo.
  • Coloque o argumento -- antes. Isso diz ao comando para parar de procurar opções.

Então, aqui estão algumas maneiras de mudar para este subdiretório:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'
    
por 26.03.2013 / 00:56
5

O "e" comercial precisa ser escapado, mas o problema que você está tendo é provavelmente o principal - , em vez do "e" comercial. O principal - fez o cd pensar que você está passando opções. Você pode contornar isso usando ./ :

cd './-3ab_&_-3dc.img'
    
por 26.03.2013 / 00:46