O que essa sintaxe significa?

16

Eu sou novo no terminal e estou tentando aprender como usá-lo.

O que essas linhas fazem? E como eles funcionam?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Pessoa desconhecida
fonte
7
$ man date && man echona concha.
code_dredd

Respostas:

76
$ type echo
echo is a shell builtin

ou seja, o echocomando faz parte do bashpróprio programa (supondo que você use o bash)

-n é uma opção, então vamos ver o que ele faz

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

Então, quando executamos a linha:

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

Hmm, isso não parece muito bom, porque não há nova linha após o texto impresso. Voltaremos a isso.

$ type date
date is /bin/date

ah, então o datecomando é um programa separado. O que isso faz?

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

Os caracteres após o datecomando são opções de formato (que devem ser precedidos por +) - partes diferentes da data são especificadas (por exemplo, %Aé o nome completo do dia da semana - consulte o restante man datepara obter a lista completa de opções)

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

Portanto, se juntarmos os comandos em um script e executar o script, obteremos

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

Agradável! Se você deseja o mesmo efeito em um terminal, pode usar um ponto e vírgula para separar os dois comandos em vez de uma nova linha:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Zanna
fonte
21
Esta é uma resposta avançada de RTFM, +1
YSC
11
Eu diria que este está faltando uma explicação para o que o sinal de mais antes que o argumento é
Délisson Junio
@ DélissonJunio editado, mas Melebius' resposta mostra isso melhor com a página homem citação direta
Zanna
@ Zanna, eu não sou o OP, mas o que chamou minha atenção foi o fato de o plus parecer estranho, pois eu acho que o bash interpretaria tudo entre aspas como um argumento, sem incluir o plus. Mas acho que essa é outra questão.
Délisson Junio
2
Na verdade, você também pode colocar o sinal de mais dentro das aspas. O Bash tem uma maneira estranha de executar textos citados e adjacentes juntos, por exemplo, cd "$ x" / output ou até cd nospace / "with space" / nospace
StarWeaver 8/17
10

Você deve começar com páginas de manual, o comando man. Basta digitar man <command>para obter informações sobre a <command>. A navegação mannão é muito intuitiva, mas existem muitos guias, por exemplo, https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Partes relevantes man echoe man date:

eco

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

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Portanto, ele imprime a sequência e não segue para a nova linha (que é o comportamento padrão); portanto, a saída do próximo comando será impressa no lado direito da sequência repetida.

encontro

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 esteja claro. Sinta-se livre para perguntar se não.

Melebius
fonte
Muito obrigado. Tenho outra pergunta: já existe uma função interna para mostrar a data no terminal?
Pessoa desconhecida
@ Zanna Não é realmente uma pergunta nova, está relacionada a uma pergunta que eu fiz.
Pessoa desconhecida
11
@Desconhecido, se você deseja que a data seja exibida no terminal por padrão, essa é realmente uma pergunta completamente diferente de "o que esse código faz" porque você precisaria editar a variável PS1 (ou talvez isso possa ser feito com o aplicativo do terminal configurações - sobre que eu sou ignorante), que está fora do escopo deste post
Zanna
11
@Unknownperson date faz show de data no terminal (interface de linha de comando). Se você quiser algo mais (como o que Zanna sugere), faça uma nova pergunta.
Melebius
4
echo -n "Today's date is: "

Ele será impresso: a data de hoje é:

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

Irá imprimir algo como isto: terça-feira, 7 de fevereiro de 2017

Conselho :

  1. use manou --helpcomando para saber mais sobre outros comandos.
    por exemplo :

    man echo
    echo --help
  2. Experimente estes desafios, os desafios são realmente bons para ajudá-lo a aprender a fazer as coisas no terminal.

Avinash
fonte