Что означает этот синтаксис?

16

Я новичок в терминале и пытаюсь научиться им пользоваться.

Что делают эти строки? И как они работают?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
неизвестный человек
источник
7
$ man date && man echoна оболочке.
code_dredd

Ответы:

76
$ type echo
echo is a shell builtin

это означает, что echoкоманда является частью самой bashпрограммы (если вы используете bash)

-n это вариант, так что давайте посмотрим, что он делает

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

Итак, когда мы запускаем линию:

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

Хм, это выглядит не очень хорошо, потому что после напечатанного текста нет новой строки. Мы вернемся к этому.

$ type date
date is /bin/date

ну так dateкоманда это отдельная программа. Что оно делает?

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

Символы после dateкоманды представляют собой параметры формата (перед которыми должны стоять символы +) - указываются разные части даты (например, %Aполное имя дня недели - man dateполный список параметров см. В остальной части )

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

Так что, если мы соберем команды в сценарии и затем запустим сценарий, мы получим

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

Ницца! Если вам нужен тот же эффект в терминале, вы можете использовать точку с запятой для разделения двух команд вместо новой строки:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Занна
источник
21
Это продвинутый RTFM ответ, +1
СМУ
1
Я бы сказал, что здесь отсутствует объяснение того, что означает знак плюс перед аргументом
Делиссон Хунио
@ DélissonJunio ​​отредактировал, но ответ Мелебиуса показывает это лучше с прямой цитатой man-страницы
Zanna
@Zanna Я не OP, но то, что привлекло мое внимание, было то, что плюс кажется странным, поскольку я думаю, что bash будет интерпретировать все между кавычками как один аргумент, не включая плюс. Но я думаю, это другой вопрос
Делиссон Хунио,
2
Вы также можете поместить плюс в кавычки. Bash имеет странный способ работы вместе заключенного в кавычки и смежного текста, например cd "$ x" / output или даже cd nospace / "with space" / nospace
StarWeaver
10

Вы должны начать с справочных страниц, команда man. Просто введите, man <command>чтобы получить информацию о <command>. Навигация manне очень интуитивно понятна, но есть много руководств, например, https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Соответствующие части man echoи man date:

эхо

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

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Таким образом, он печатает строку и не переходит на новую строку после этого (что является поведением по умолчанию), поэтому выходные данные следующей команды будут напечатаны справа от отображаемой строки.

Дата

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

Надеюсь, это понятно. Не стесняйтесь спрашивать, если нет.

Melebius
источник
Большое спасибо. У меня другой вопрос: есть ли встроенная функция для отображения даты в терминале?
Неизвестный человек
@Zanna Это на самом деле не новый вопрос, это связано с вопросом, который я задал.
Неизвестный
1
@ Неизвестный, если вы хотите, чтобы дата отображалась в терминале по умолчанию, это действительно совершенно другой вопрос, чем «что делает этот код», потому что вам нужно будет отредактировать переменную PS1 (или, возможно, это можно сделать с помощью приложения терминала). настройки - о том, что я в неведении), что выходит за рамки этого поста
Zanna
1
@Unknownperson date делает дату шоу в терминале (интерфейс командной строки). Если вы хотите что-то еще (например, то, что предлагает Занна), пожалуйста, задайте новый вопрос.
Мелебиус
4
echo -n "Today's date is: "

Он напечатает: Сегодняшняя дата:

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

Будет напечатано что-то вроде этого: вторник, 7 февраля 2017 г.

Совет :

  1. используйте manили --helpкоманду, чтобы узнать больше о любых других командах.
    например:

    man echo
    echo --help
  2. Попробуйте эти задачи, задачи действительно полезны, чтобы помочь вам научиться делать что-то на терминале.

Авинаш
источник