significado de “'” (apóstrofo) nos comandos do terminal

10

Por alguma razão estranha, eu tentei "'" como separador de palavras em identificadores, como em:

$ export foo'bar=1
> 
> ^C
$ 

O resultado é como mostrado acima, id est o prompt muda para ">" e o sistema obviamente espera por mais informações da minha parte. Como você vê, eu tive que ctrl-C para escapar. O mesmo acontece usando outros comandos como

$ ls foo'bar
$ mkdir foo'bar

Estou curioso sobre o sentido de tudo isso, é isso que o significado especial "'" tem nos comandos do terminal (tão especial que é desmontado mesmo dentro dos ids).

Extra: Como um aparte, eu também gostaria de saber o conjunto de caracteres especiais ou inválidos em nomes de arquivos e pastas, tanto em sistemas Unix-like quanto em sistemas Windows (para obter o subconjunto comum de seguras) (em particular, e quanto a todos os não-ASCII?).

Obrigado Denis

    
por denis 63 17.12.2012 / 15:49

2 respostas

14

O caractere 'é um caractere muito poderoso sempre que usado em qualquer comando shell. Basicamente, o '(marcas de apóstrofo) desativa todos os tipos de transformações ou modificações. Ele consideraria o que está entre as marcas como uma entidade única, ou seja, um único parâmetro. Absolutamente nenhum tipo de substituição ou expansão aconteceria.

Exemplo:

 $ echo '$HOME'

produziria na saída a string $HOME em si e não imprimiria o caminho para o seu diretório pessoal. Como aspas simples previnem qualquer tipo de expansão, substituição e simples consideram o que quer que esteja presente como um parâmetro simples em si mesmo.

Se você quiser usar o apóstrofo como é, terá que escapar dele:

 $ mkdir foo\'bar

 $ cd foo\'bar

Se não for escapado, ele esperará que seu par seja fechado, como aconteceu no seu primeiro exemplo.

Então, corrigido, seu comando será:

 $ export foo\'bar=1

NOTA: Como Milan Todorovic notou, isso não será válido, porque você não pode usar apóstrofo nesse caso.

    
por Frantique 17.12.2012 / 15:55
7

Caractere ' é um caractere especial. Você o usa para marcar parte da entrada da linha de comando que não será alterada (por exemplo, nenhum substituto para curingas). Por exemplo:

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

Isso significa que o argumento para ls foi bla* e nem tudo que começa com bla .

O motivo pelo qual você obtém o caractere > é porque você deve usar um ' para abrir e um ' para fechar a parte que não será alterada.

Se você quiser usar ' nos nomes das pastas, você deve escapar assim: \' . Portanto, se você quiser listar a pasta chamada foo'bar , digite ls foo\'bar .

Ah, e não tenho certeza se é possível usar ' em nomes de variáveis de ambiente. Eu acho que você não pode usar export foo\'bar=1 ,

Espero que isso ajude.

    
por Milan Todorovic 17.12.2012 / 15:57