¿Qué significa esta sintaxis?

16

Soy nuevo en el terminal e intento aprender a usarlo.

¿Qué hacen estas líneas? ¿Y cómo funcionan?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Persona desconocida
fuente
77
$ man date && man echoen el caparazón
code_dredd

Respuestas:

76
$ type echo
echo is a shell builtin

es decir, el echocomando es parte del bashprograma en sí (suponiendo que use bash)

-n es una opción, así que veamos qué hace

$ help echo
Write arguments to the standard output
...
-n  do not append a newline

Entonces cuando corremos la línea:

zanna@monster:~$ echo -n "Today's date is: "
Today's date is: zanna@monster:~$ 

Hmm, eso no se ve muy bien, porque no hay una nueva línea después del texto impreso. Volveremos a esto.

$ type date
date is /bin/date

ah, entonces el datecomando es un programa separado. ¿Qué hace?

$ man date
Display the current time in the given FORMAT, or set the system date.

Los caracteres después del datecomando son opciones de formato (que deben ir precedidas por +): se especifican diferentes partes de la fecha (por ejemplo, %Ael nombre completo del día de la semana; consulte el resto man datepara ver la lista completa de opciones)

$ date +"%A, %B %-d, %Y"
Tuesday, February 7, 2017

Entonces, si juntamos los comandos en un script y luego ejecutamos el script, obtendremos

Today's date is: Tuesday, February 7, 2017

¡Agradable! Si desea el mismo efecto en un terminal, puede usar un punto y coma para separar los dos comandos en lugar de una nueva línea:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Zanna
fuente
21
Esta es una respuesta avanzada de RTFM, +1
YSC
1
Yo diría que este no se encuentra una explicación para lo que el signo más antes de que el argumento es
Délisson Junio
@ DélissonJunio ​​editó, pero la respuesta de Melebius lo muestra mejor con la cita directa de la página del manual
Zanna
@Zanna No soy la OP, pero lo que me llamó la atención fue el hecho de que la ventaja parece extraña, ya que creo que bash interpretaría todo entre comillas como un argumento, sin incluir la ventaja. Pero supongo que esta es otra pregunta
Délisson Junio
2
De hecho, también puede poner el signo más entre comillas. Bash tiene una forma extraña de ejecutar juntos texto citado y adyacente, por ejemplo, cd "$ x" / output o incluso cd nospace / "with space" / nospace
StarWeaver
10

Debe comenzar con las páginas del manual, el comando man. Simplemente escriba man <command>para obtener información sobre a <command>. La navegación manno es muy intuitiva, pero hay muchas guías, por ejemplo https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Partes relevantes de man echoy man date:

eco

echo [SHORT-OPTION]... [STRING]...

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Por lo tanto, imprime la cadena y no pasa a la nueva línea después de eso (que es el comportamiento predeterminado), por lo que la salida del siguiente comando se imprimirá en el lado derecho de la cadena con eco.

fecha

date [OPTION]... [+FORMAT]

FORMAT controls the output.  Interpreted sequences are:

%A     locale's full weekday name (e.g., Sunday)

%B     locale's full month name (e.g., January)

%d     day of month (e.g., 01)

%Y     year

By default, date pads numeric fields with zeroes.  The following optional flags may follow '%':

-      (hyphen) do not pad the field

Espero que esté claro. No dude en preguntar si no.

Melebio
fuente
Muchas gracias. Tengo otra pregunta: ¿ya hay una función incorporada para mostrar la fecha en la terminal?
Persona desconocida
@Zanna En realidad no es una pregunta nueva, está relacionada con una pregunta que he hecho.
Persona desconocida
1
@ Persona desconocida si desea que la fecha se muestre en el terminal de forma predeterminada, esa es realmente una pregunta completamente diferente a "¿qué hace este código" porque necesitaría editar la variable PS1 (o tal vez se puede hacer con la aplicación del terminal configuración - sobre eso soy ignorante) que está fuera del alcance de esta publicación
Zanna
1
@Unknownperson date hace la fecha muestran en (interfaz de línea de comandos) terminal. Si desea algo más (como lo que sugiere Zanna), haga una nueva pregunta.
Melebius
4
echo -n "Today's date is: "

Se imprimirá: la fecha de hoy es:

date +"%A, %B %-d, %Y"

Imprimirá algo como esto: martes 7 de febrero de 2017

Consejo :

  1. use mano --helpcomando para saber más sobre cualquier otro comando.
    p.ej :

    man echo
    echo --help
  2. Pruebe estos desafíos Los desafíos son realmente buenos para ayudarlo a aprender a hacer cosas en la terminal.

Avinash
fuente