Qual é o uso do comando quote
? Não encontrei nenhuma informação sobre ele, ele não está entre os arquivos executáveis nas /bin
pastas e não pode ser encontrado entre os built-ins do Bash. Parece que apenas imprime seu primeiro parâmetro, como um echo
comando e nada mais.
command-line
bash
whtyger
fonte
fonte
quote
, usada para fins tão obscuros ... Nenhum prefixo para marcá-lo "interno", nenhuma documentação, nada, a menos que você procure detalhes de implementação da mecânica de conclusão avançada da distribuição. Acho isso um pouco perturbador.Respostas:
O que é isso?
Notei que este comando não funciona no meu shell ( peixe, shell interativo amigável ). Parece que só funciona no bash (padrão do Ubuntu).
O que isso faz? Para que isso pode ser usado?
Ele adiciona as aspas, mas nenhuma nova linha. Ele também escapa aspas simples de uma maneira adequada para o bash. Pode ser útil nos scripts 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.
É realmente estranho que eu não tenha encontrado nenhuma documentação (na Web) sobre isso. Mas bem, é fácil ver o que faz.
fonte
which
é inútil, tanto em shells interativos quanto em scripts. Use emtype
vez disso.type quote
dirá que é uma função e até mostra a definição da função. Corrahelp type
paratype
saber mais sobre o builtin./etc/bash_completion
, que é fornecida~/.bashrc
por padrão, não por/etc/bash.bashrc
onde a seção referente/etc/bash_completion
é comentada. Também a/usr/share/bash-completion/
pasta está ausente no Ubuntu 12.04.quote
é uma função definida (aqui no meu sistema Debian, mas acho que é a mesma coisa no Ubuntu) no arquivo/usr/share/bash-completion/bash_completion
, que é originário/etc/bash.bashrc
da inicialização do Bash.Eu nunca usaria essa função! Se você precisar citar itens para poder ser usado com segurança por um shell, use
printf
com o%q
modificador, como:De fato, mesmo que isso raramente seja usado, sempre existem estratégias melhores para coisas de alto nível, como nós, usuários, normalmente fazemos. Essa
quote
coisa é usada internamente por algumas coisas obscuras que nem queremos saber. Estaquote
função é provavelmente específica do fornecedor / distribuição (leia específica do Debian) e provavelmente não é portátil, e pode até mudar em versões futuras.Editar. Acabei de verificar um sistema Ubuntu 12.04, e a
quote
função é definida em/etc/bash_completion
, originada por/etc/bash.bashrc
, ela própria originada por/etc/profile
.Como eu determinei isso? usando um pouco de heurística:
Verifique se
quote
aparece em/etc/profile
:Não. Vá para o próximo passo.
Quais são os arquivos obtidos
/etc/profile
?Eu tenho
$i
(necessidade de olhar para a fonte para o que este fontes, mas neste caso é os arquivos/etc/profile.d/*.sh
se algum (e se legível) e/etc/bash.bashrc
. Olhando nos/etc/bash.bashrc
.quote
dentro/etc/bash.bashrc
? sim / não, etc ...fonte
quote
, na verdade, escapa aspas simples, por isso é utilizável pelo shell. Funciona tão bem quantoprintf %q
neste caso de uso.my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
. Você veria algo comoExpected: ~/.bashrc
,quote: ~/.bashrc
eprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
, que lhe diz o nome da função, número da linha é definido em, eo nome do arquivo é definido no.quote
é uma função:Essa função é definida em algum lugar do arquivo de inicialização do bash. Mais precisamente, se você estiver usando o Ubuntu 13.04, poderá encontrá-lo na
/usr/share/bash-completion/bash_completion
linha 142.Use o seguinte comando para verificá-lo:
Seu objetivo é evidentemente claro.
fonte
$INPUT
, que pode conter espaços, aspas ou outros caracteres, e retornar uma string que definitivamente é tratada apenas como um único argumento pelo bash.