Cosa significa questa sintassi?


Risposte:


76
$ type echo
echo is a shell builtin

significato, il echocomando fa parte del bashprogramma stesso (supponendo che tu usi bash)

-n è un'opzione, quindi vediamo cosa fa

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

Quindi quando eseguiamo la linea:

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

Hmm che non sembra molto buono, perché non c'è una nuova riga dopo il testo stampato. Torneremo su questo.

$ type date
date is /bin/date

ah quindi il datecomando è un programma separato. Che cosa fa?

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

I caratteri dopo il datecomando sono opzioni di formato (che devono essere precedute da +) - vengono specificate diverse parti della data (ad esempio %Aè il nome completo del giorno della settimana - vedere il resto di man dateper l'elenco completo delle opzioni)

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

Quindi se mettiamo insieme i comandi in uno script e quindi eseguiamo lo script otterremo

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

Bello! Se si desidera lo stesso effetto in un terminale, è possibile utilizzare un punto e virgola per separare i due comandi anziché una nuova riga:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017

21
Questa è una risposta RTFM avanzata, +1
YSC

1
Direi che manca una spiegazione di quale sia il segno più prima dell'argomentazione
Délisson Junio

@DélissonJunio ​​modificato, ma la risposta di Melebius lo mostra meglio con la citazione diretta della pagina man
Zanna

@Zanna Non sono l'OP, ma ciò che ha attirato la mia attenzione è stato il fatto che il plus sembra strano dato che penso che bash interpreterebbe tutto tra virgolette come un argomento, senza includere il plus. Ma suppongo che questa sia un'altra domanda
Délisson Junio

2
In realtà puoi anche inserire il plus tra virgolette. Bash ha un modo strano di correre insieme testo tra virgolette e adiacente, ad esempio cd "$ x" / output o persino cd nospace / "con spazio" / nospace
StarWeaver

10

Dovresti iniziare con le pagine di manuale, il comando man. Basta digitare man <command>per ottenere informazioni su a <command>. La navigazione in mannon è molto intuitiva ma ci sono molte guide, ad esempio https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Parti rilevanti di man echoe man date:

eco

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

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Quindi stampa la stringa e non passa alla nuova riga dopo (che è il comportamento predefinito), quindi l'output del comando successivo verrà stampato sul lato destro della stringa eco.

Data

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

Spero sia chiaro. Sentiti libero di chiedere in caso contrario.


Molte grazie. Ho un'altra domanda: esiste già una funzione integrata per mostrare la data nel terminale?
Sconosciuto il

@Zanna In realtà non è una nuova domanda, è correlata a una domanda che ho posto.
Sconosciuto il

1
@Sconosciuta se si desidera visualizzare la data nel terminale per impostazione predefinita, questa è una domanda completamente diversa da "cosa fa questo codice" perché sarebbe necessario modificare la variabile PS1 (o forse può essere fatto con l'app terminale ambientazioni - a questo proposito sono ignorante) che non rientra nell'ambito di questo post
Zanna

1
@Unknownperson date fa mostra data nel terminale (CLI). Se vuoi qualcosa di più (come quello che suggerisce Zanna), per favore fai una nuova domanda.
Melebio

4
echo -n "Today's date is: "

Stampa: la data di oggi è:

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

Stamperà qualcosa del genere: martedì 7 febbraio 2017

Consiglio :

  1. utilizzare mano --helpcomando per saperne di più su qualsiasi altro comando.
    per esempio :

    man echo
    echo --help
  2. Prova queste sfide le sfide sono davvero utili per aiutarti a imparare a fare le cose sul terminale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.