comando "quote" no shell

14

Qual é o uso do comando quote ? Eu não encontrei nenhuma informação sobre isso, não está entre os arquivos executáveis em /bin pastas, e não pode ser encontrado entre Bash built-ins. Parece que ele imprime apenas o primeiro parâmetro, como um comando echo e nada mais.

    
por whtyger 07.10.2013 / 17:59

3 respostas

9

O que é isso?

Eu notei que esse comando não funciona no meu shell ( peixe, shell interativo amigável ). Parece que funciona apenas no bash (padrão do Ubuntu).

chocobai@pc ~> /bin/bash 
chocobai@pc:~$ quote asdf
'asdf'chocobai@pc:~$ 

chocobai@pc:~$ type quote
quote is a function.
quote ()
{ 
    local quoted=${1//\'/\'\\'\'};
    printf "'%s'" "$quoted"
}

O que isso faz? Para que pode ser usado?

Adiciona as aspas, mas não a nova linha. Ele também escapa aspas simples de uma maneira adequada para o bash. Pode ser útil em scripts para citar uma variável ou algum outro tipo de string. Você precisa disso, por exemplo, para caminhos / parâmetros com espaços. Embora existam outras maneiras de fazer isso.

É muito estranho não encontrar nenhuma documentação (na web) sobre isso. Mas bem, é fácil ver o que isso faz.

    
por verpfeilt 07.10.2013 / 18:32
8

quote é uma função que é definida (aqui no meu sistema Debian, mas acho que é a mesma no Ubuntu) no arquivo /usr/share/bash-completion/bash_completion , que é originado por /etc/bash.bashrc na inicialização do Bash.

Eu nunca usaria essa função! Se você precisar citar as coisas para poder ser usado com segurança por um shell, use printf com o modificador %q , como:

printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""

Na verdade, mesmo isso é muito raramente usado, sempre há estratégias melhores para coisas de alto nível como nós, usuários, geralmente fazemos. Essa coisa de quote é usada internamente por algumas coisas obscuras que nem sequer queremos saber. Esta função quote é provavelmente específica de um fornecedor / distribuição (leia Debian específico) e provavelmente não é portável, e pode até mesmo mudar em versões futuras.

Editar. Acabei de verificar em um sistema Ubuntu 12.04, e a função quote está definida em /etc/bash_completion , originada por /etc/bash.bashrc , originada por /etc/profile .

Como eu determinei isso? usando um pouco de heurística:

  • Verifique se quote aparece em /etc/profile :

    grep '\bquote\b' /etc/profile
    

    Não. Vá para o próximo passo.

  • Quais são os arquivos originados por /etc/profile ?

    grep '[[:space:]]\.[[:space:]]' /etc/profile
    

    Eu tenho $i (preciso examinar a origem para saber o que são essas origens, mas, nesse caso, são os arquivos /etc/profile.d/*.sh , se houver algum (e se legível) e /etc/bash.bashrc . Procurando em /etc/bash.bashrc .

  • É quote em /etc/bash.bashrc ? sim / não, etc ...
por gniourf_gniourf 07.10.2013 / 18:49
3

quote é uma função:

quote () 
{ 
    local quoted=${1//\'/\'\\'\'};
    printf "'%s'" "$quoted"
}

Esta função é definida em algum lugar em um arquivo de inicialização do bash. Mais precisamente, se você estiver usando o Ubuntu 13.04, você pode encontrá-lo em /usr/share/bash-completion/bash_completion na linha 142.

Use o seguinte comando para verificar:

type quote

Sua finalidade é evidentemente clara.

    
por Radu Rădeanu 07.10.2013 / 18:45