¿Cuál es el uso del comando quote
? No he encontrado ninguna información al respecto, no se encuentra entre los archivos ejecutables en las /bin
carpetas, y no se puede encontrar entre las funciones integradas de Bash. Parece que solo imprime su primer parámetro, como un echo
comando y nada más.
command-line
bash
whtyger
fuente
fuente
quote
, utilizada para un propósito tan oscuro ... Sin prefijo para marcarlo "interno", sin documentación, nada, a menos que vaya a cavar en detalles de implementación de la mecánica de finalización avanzada de la distribución. Esto me parece un poco inquietante.Respuestas:
¿Qué es?
Noté que este comando no funciona en mi shell ( fish, shell interactivo amigable ). Parece que solo funciona en bash (el valor predeterminado de Ubuntu).
¿Qué hace? Para qué se puede usar?
Agrega las comillas pero no la nueva línea. También escapa a las comillas simples de una manera adecuada para bash. Puede ser útil en las secuencias de comandos para citar una variable o algún otro tipo de cadena. Necesita esto, por ejemplo, para rutas / parámetros con espacios. Aunque hay otras formas de hacer esto.
Es realmente extraño que no pude encontrar ninguna documentación (en la web) al respecto. Pero bueno, es fácil ver lo que hace.
fuente
which
es inútil, tanto en shells interactivos como en scripts. Usar en sutype
lugar.type quote
le dirá que es una función e incluso muestra la definición de la función. Correhelp type
por más en eltype
edificio./etc/bash_completion
, que se obtiene~/.bashrc
de forma predeterminada, no por/etc/bash.bashrc
donde/etc/bash_completion
se comenta la sección correspondiente. También la/usr/share/bash-completion/
carpeta está ausente en Ubuntu 12.04.quote
es una función que está definida (aquí en mi sistema Debian, pero supongo que es lo mismo en Ubuntu) en el archivo/usr/share/bash-completion/bash_completion
, que en sí mismo se origina/etc/bash.bashrc
en el inicio de Bash.¡Nunca usaría esta función! Si necesita citar cosas para que un shell pueda usarlas
printf
con seguridad, úselas con el%q
modificador, como:De hecho, incluso esto se usa muy raramente, siempre hay mejores estrategias para cosas de alto nivel como nosotros, los usuarios, usualmente lo hacemos. Esta
quote
cosa es utilizada internamente por algunas cosas oscuras que ni siquiera queremos saber. Estaquote
función es probablemente específica del proveedor / distribución (leer específica de Debian) y probablemente no sea portátil en absoluto, e incluso podría cambiar en futuras versiones.Editar. Acabo de comprobar en un sistema Ubuntu 12.04, y la
quote
función se define en/etc/bash_completion
, originada por/etc/bash.bashrc
, propiamente dicha/etc/profile
.¿Cómo determiné esto? usando un poco de heurística:
Verificar si
quote
aparece en/etc/profile
:No. Ve al siguiente paso.
¿De qué proceden los archivos
/etc/profile
?Tengo
$i
(necesito buscar en la fuente cuáles son estas fuentes, pero en este caso son los archivos/etc/profile.d/*.sh
si los hay (y si son legibles) y/etc/bash.bashrc
. Buscando/etc/bash.bashrc
.quote
adentro/etc/bash.bashrc
? si / no, etc ...fuente
quote
en realidad escapa a las comillas simples, por lo que puede ser utilizado por el shell. Funciona tan bien comoprintf %q
para este 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")"
. Verías algo comoExpected: ~/.bashrc
,quote: ~/.bashrc
yprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
, que le indica el nombre de la función, el número de línea en el que está definido y el nombre de archivo en el que está definido.quote
es una función:Esta función se define en algún lugar de un archivo de inicialización bash. Más precisamente, si está usando Ubuntu 13.04, puede encontrarlo en
/usr/share/bash-completion/bash_completion
la línea 142.Use el siguiente comando para verificarlo:
Su propósito es evidentemente claro.
fuente
$INPUT
, que puede contener espacios, comillas u otros caracteres, y devolver una cadena que definitivamente solo bash trata como un argumento único.