Пакет A может предоставлять пакет B, даже если B не является виртуальным. Это делается, когда, например, A обеспечивает эквивалентную функциональность для B, но другие пакеты зависят от B. В этом случае cinnamon
, notify-osd
и т. д. могут быть установлены вместо notification-daemon
для удовлетворения зависимостей.
Что ж, давайте рассмотрим каждую команду по очереди:
read char
Это будет считываться со стандартного ввода (обычно с вашей клавиатуры, но может быть косвенным файлом или конвейерным потоком; см. ниже )и поместите полученные данные в переменную с именем char
.
echo -e "YES\nNO\n"
echo
выводит на стандартный вывод (, как правило, терминал )предоставленные параметры. Переключатель -e
будет (часто, но не всегда; echo
проблематична с точки зрения последовательной реализации. )позволяет вам e
экранировать определенные символы для выполнения элементарного форматирования. В этом случае используется \n
, который является экранированным n
, что является сокращением для n
ewline.
grep -i $char
grep
— это инструмент для поиска предоставленных входных данных, чтобы увидеть, есть ли какие-либо совпадения для предоставленного шаблона. Переключатель -i
указывает, что это поиск i
без учета регистра.
|
между командами echo
и grep
представляет собой "трубу". Это связывает вывод первой команды с вводом второй, а это означает, что grep
будет искать в этом корпусе шаблон, отраженный в содержимом переменнойchar
:
YES
NO
Практическим результатом этой последовательности команд является просмотр предоставленного ввода (, который предполагается на основе имени переменной как одиночный символ, но это не проверяется ). Если это символ Y
, E
, S
, y
, e
или s
, вывод будет YES
. Если это символ N
, O
, n
или o
, вывод будет NO
. Однако, если (, например ), вводится yo
или ne
,то ничего не выводится.
Как отмечалось ранее, предположение о том, что вводится один символ, не проверяется. Это не единственный антипаттерн в приведенном примере последовательности команд. Например, переменные не заключаются в кавычки; и инструмент регулярных выражений(grep
)используется без проверки ввода на наличие подстановочных знаков регулярных выражений.
"Символ" (, а не :строка )считывается из /dev/stdin
. Это означает, что :вы вводите его.
Затем в /dev/stdout
выводятся две строки. Имеется в виду ваша консоль.
И через трубу ("|" )это затем grep -ed для нечувствительной к регистру -версии вашего ввода.
Это означает, что если вы введете «bar», он просто завершится без видимого вывода, но если вы введете, скажем, «y», то будет выведена строка «YES», скорее всего, даже с выделением «Y»