Que signifie cette syntaxe?

16

Je suis nouveau sur le terminal et j'essaie d'apprendre à l'utiliser.

Que font ces lignes? Et comment ça marche?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Personne inconnue
la source
7
$ man date && man echoà la coquille.
code_dredd

Réponses:

76
$ type echo
echo is a shell builtin

ce qui signifie que la echocommande fait partie du bashprogramme lui-même (en supposant que vous utilisez bash)

-n est une option, voyons donc ce qu'il fait

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

Donc, quand nous courons la ligne:

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

Hmm ça n'a pas l'air très bien, car il n'y a pas de nouvelle ligne après le texte imprimé. Nous y reviendrons.

$ type date
date is /bin/date

ah donc la datecommande est un programme séparé. Qu'est ce que ça fait?

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

Les caractères après la datecommande sont des options de format (qui doivent être précédées de +) - différentes parties de la date sont spécifiées (par exemple, %Ale nom complet du jour de la semaine - voir le reste de man datepour la liste complète des options)

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

Donc, si nous mettons les commandes ensemble dans un script, puis exécutons le script, nous obtiendrons

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

Agréable! Si vous voulez le même effet dans un terminal, vous pouvez utiliser un point-virgule pour séparer les deux commandes au lieu d'une nouvelle ligne:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Zanna
la source
21
Ceci est une réponse RTFM avancée, +1
YSC
1
Je dirais qu'il manque une explication de ce qu'est le signe plus avant l'argument
Délisson Junio
@ DélissonJunio ​​édité, mais la réponse de Melebius le montre mieux avec la citation de page de manuel directe
Zanna
@Zanna Je ne suis pas l'OP, mais ce qui a attiré mon attention, c'est le fait que le plus semble bizarre car je pense que bash interpréterait tout entre les guillemets comme un argument, sans inclure le plus. Mais je suppose que c'est une autre question
Délisson Junio
2
Vous pouvez également mettre le plus à l'intérieur des guillemets. Bash a une façon étrange de courir ensemble le texte cité et adjacent, par exemple cd "$ x" / sortie ou même cd nospace / "avec espace" / nospace
StarWeaver
10

Vous devriez commencer par les pages de manuel, la commande man. Tapez simplement man <command>pour obtenir des informations sur a <command>. La navigation mann'est pas très intuitive, mais il existe de nombreux guides, par exemple https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Parties pertinentes de man echoet man date:

écho

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

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Il imprime donc la chaîne et ne passe pas à la nouvelle ligne après cela (ce qui est le comportement par défaut), donc la sortie de la commande suivante sera imprimée sur le côté droit de la chaîne en écho.

Date

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

J'espère que c'est clair. N'hésitez pas à demander sinon.

Melebius
la source
Merci beaucoup. J'ai une autre question: existe-t-il déjà une fonction intégrée pour afficher la date dans le terminal?
Personne inconnue
@Zanna Ce n'est pas vraiment une nouvelle question, elle est liée à une question que j'ai posée.
Personne inconnue
1
@Unknownperson si vous voulez que la date soit affichée dans le terminal par défaut, c'est vraiment une question complètement différente de "qu'est-ce que ce code fait" parce que vous auriez besoin de modifier la variable PS1 (ou peut-être que cela peut être fait avec l'application terminal paramètres - à ce sujet, je l'ignore) qui est hors de portée de ce post
Zanna
1
@Unknownperson date fait date de l' exposition dans le terminal (interface de ligne de commande). Si vous voulez quelque chose de plus (comme ce que suggère Zanna), veuillez poser une nouvelle question.
Melebius
4
echo -n "Today's date is: "

Il sera imprimé: La date d'aujourd'hui est:

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

Il imprimera quelque chose comme ceci: mardi 7 février 2017

Conseil :

  1. utilisez manou --helpcommande pour en savoir plus sur les autres commandes.
    par exemple :

    man echo
    echo --help
  2. Essayez ces défis, les défis sont vraiment bons pour vous aider à apprendre à faire des choses sur le terminal.

Avinash
la source