Що означає цей синтаксис?


Відповіді:


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
YSC

1
Я б сказав, що це відсутні пояснення того, що означає знак плюс перед аргументом
Деліссон Хуніо,

@ DélissonJunio ​​відредагував, але відповідь Мелебія показує це краще за допомогою прямої цитати на сторінці чоловіка
Zanna

@Zanna Я не ОП, але що мені привернуло увагу, це те, що плюс здається дивним, як я думаю, що Баш буде інтерпретувати все між цитатами як один аргумент, не враховуючи плюс. Але я здогадуюсь, це вже інше питання
Деліссон Хуніо

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

Сподіваюся, це зрозуміло. Сміливо запитайте, чи ні.


Дуже дякую. У мене є ще одне питання: чи вже є вбудована функція для показу дати в терміналі?
Невідома особа

@Zanna Це насправді не нове питання, воно пов'язане з питанням, яке я задав.
Невідома особа

1
@Unknownperson, якщо ви хочете, щоб дата була відображена в терміналі за замовчуванням, це справді зовсім інше питання "що робить цей код", тому що вам потрібно буде відредагувати змінну PS1 (або, можливо, це можна зробити за допомогою термінальної програми налаштування - про те, що я не знаю), що виходить за межі цієї публікації
Zanna

1
@Unknownperson date робить дату шоу в терміналі (інтерфейс командного рядка). Якщо ви хочете чогось більшого (наприклад, що пропонує Zanna), будь ласка, задайте нове запитання.
Мелебій

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

Він надрукує: Сьогоднішня дата:

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

Він надрукує щось подібне: вівторок, 7 лютого 2017 року

Поради :

  1. використовуйте manабо --helpкоманду, щоб дізнатися більше про будь-які інші команди.
    наприклад:

    man echo
    echo --help
  2. Спробуйте ці складні виклики справді добре допомогти вам навчитися робити справи на терміналі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.