Понимание команд read, echo и grep в командной строке bash

Пакет A может предоставлять пакет B, даже если B не является виртуальным. Это делается, когда, например, A обеспечивает эквивалентную функциональность для B, но другие пакеты зависят от B. В этом случае cinnamon, notify-osdи т. д. могут быть установлены вместо notification-daemonдля удовлетворения зависимостей.

0
11.03.2020, 16:16
2 ответа

Что ж, давайте рассмотрим каждую команду по очереди:

read char

Это будет считываться со стандартного ввода (обычно с вашей клавиатуры, но может быть косвенным файлом или конвейерным потоком; см. ниже )и поместите полученные данные в переменную с именем char.

echo -e "YES\nNO\n"

echoвыводит на стандартный вывод (, как правило, терминал )предоставленные параметры. Переключатель -eбудет (часто, но не всегда; echoпроблематична с точки зрения последовательной реализации. )позволяет вам eэкранировать определенные символы для выполнения элементарного форматирования. В этом случае используется \n, который является экранированным n, что является сокращением для newline.

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)используется без проверки ввода на наличие подстановочных знаков регулярных выражений.

3
28.04.2021, 23:20

"Символ" (, а не :строка )считывается из /dev/stdin. Это означает, что :вы вводите его.

Затем в /dev/stdoutвыводятся две строки. Имеется в виду ваша консоль.

И через трубу ("|" )это затем grep -ed для нечувствительной к регистру -версии вашего ввода.

Это означает, что если вы введете «bar», он просто завершится без видимого вывода, но если вы введете, скажем, «y», то будет выведена строка «YES», скорее всего, даже с выделением «Y»

0
28.04.2021, 23:20

Теги

Похожие вопросы