En AskUbuntu, he visto algunos comandos que parecen bastante complicados, con muchos símbolos en ellos. Para comprender mejor cómo se crean estos comandos, me gustaría saber qué significan los símbolos.
Por ejemplo:
find ~/ -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
o incluso más complicado:
echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"
Entiendo muy bien que la adición de parámetros como -c
, --debug
, tener ciertos efectos en el commmand principal. El significado de estos se encuentra en casi todos los casos en las man
páginas, así que eso no es realmente lo que estoy buscando.
Por favor, intente en su respuesta definir qué hacen específicamente los símbolos, en lugar de explicar los ejemplos que di. Eso podría verse así:
" means 'argument': the main command uses anything within these symbols as its source
^ is used for ...
# is used for ...
Gracias por adelantado
fuente
-c -D
podría significar algo en el comando 1 y algo completamente diferente en el comando 2.Respuestas:
Consulte la sección El Manual de referencia de Bash denominada Operación de shell y la Guía avanzada de secuencias de comandos de Bash Capítulo 3 (Caracteres especiales) .
Me refiero a aquellos en cualquier momento que necesito aprender algo nuevo sobre las secuencias de comandos de shell en ubuntu / linux.
Creo que encontrará el Capítulo 3 de ABS el más fácil de navegar para sus propósitos. Todos los símbolos se ven en el extremo izquierdo de la página con una descripción inmediatamente debajo de ellos.
fuente
Desafortunadamente, debe ir a las páginas del manual, ya que los "símbolos" pueden tener diferentes significados según el comando que los lea.
Por ejemplo, en su primer comando, el significado de {} y \; depende del comando find (man find). El significado de las comillas en un argumento para sed depende de sed o bash (ya que es un parámetro citado, puede ser una cuestión de shell). El ~ / es definitivamente una expansión del patrón bash.
Para el segundo comando complicado, se trata principalmente de cosas que hacen eco, por lo que encontrará la mayoría de la información sobre eso en la página de manual de bash.
Para responder a su comentario, los caracteres de redireccionamiento> <| se utilizan para canalizar cosas desde y hacia archivos (los signos mayores y menores que), y para conectar la salida de un comando con la entrada de otro (la tubería |). Vea aquí un buen tutorial sobre la redirección de E / S, esta es una característica de diseño muy poderosa del conjunto de herramientas y shell de Unix.
fuente
>
? Esa es una señal que también veo con frecuencia, pensé que significaba 'copiar' o algo así. ¿Es este también dependiente de un comando?El primero busca archivos que terminan
.c
desde dentro del directorio~/
yexec
utessed
(editor optimizado) donde seds
buscacybernetnews
y los cambiacybernet
.El segundo me elude ... muestra un resultado vacío cuando se ejecuta.
fuente
El mejor recurso que he encontrado para aprender comandos de terminal es LinuxCommand , que proporciona descripciones detalladas de los comandos disponibles más utilizados.
fuente
Es difícil decirle el significado completo de los símbolos mientras pega comandos complejos.
El eco en particular.
Ver man echo para el -e, permite escapar, por lo que tarde es un escape.
La mayoría de los otros símbolos son manipulaciones de cadenas.
Así que imagina que tienes una variable, i que contiene una cadena "foo"
Pero se vuelve más complejo si su variable, $ i, también es parte de una cadena
Ahora también puede manipular las cadenas, imprimir solo una parte
En tu caso
$ {i # * =} = print $ i, elimina la coincidencia más corta entre * y =, pero * en sí mismo es un comodín.
Ver http://tldp.org/LDP/abs/html/string-manipulation.html
Luego golpeamos un sub shell (x ...)
Bash procesará los comandos en el sub shell y devolverá la salida de los comandos.
x = (una subcadena de i); Seguir
Ahora tenemos una prueba, ["$ {! X}"]
Ver: http://tldp.org/LDP/abs/html/testconstructs.html
Y aquí es donde no puedo decirte más.
En bash, $ {! X} será una cadena vacía. && == lógico y || es lógico o
prueba {cadena vacía} Y echo cadena vacía o echo x
Tendría que dar más sintaxis, pero parece que este eco está canalizando su salida en alguna parte.
Nuevamente [] es una prueba, y escapamos a [al principio.
Así que solo puedo explicar mucho de lo que está haciendo el eco.
La razón por la cual no hay salida cuando ingresa el comando echo en una terminal es que es un fragmento de código, por defecto ni x ni i están definidos, por lo que toda la salida está vacía.
fuente
Para preguntas sobre símbolos en idiomas específicos, puede probar SymbolHound. Puede buscar en la web caracteres que Google no encuentre.
fuente