Поиск по сайту:

Как использовать команду Echo в Linux


Команда echo идеально подходит для записи форматированного текста в окно терминала. И это не обязательно должен быть статичный текст. Он может включать переменные оболочки, имена файлов и каталоги. Вы также можете перенаправить эхо для создания текстовых файлов и файлов журналов. Следуйте этому простому руководству, чтобы узнать, как это сделать.

Эхо повторяет то, что вы ему говорите

Зевс любил покидать гору Олимп, чтобы общаться с прекрасными нимфами. В одном путешествии он сказал горной нимфе по имени Эхо подстеречь его жену Геру, если она последует за ним. Гера действительно пришла искать Зевса, и Эхо делала все возможное, чтобы поддерживать разговор с Герой. Наконец, Гера вышла из себя и прокляла бедную Эхо так, что она только повторила последние слова, сказанные кем-то другим. Что Гера сделала с Зевсом, когда догнала его, остается только гадать.

И это, в значительной степени, большая часть жизни echo. Он повторяет то, что ему сказали повторить. Это простая функция, но жизненно важная. Например, без echo мы не смогли бы получить видимый вывод из сценариев оболочки.

Несмотря на то, что код echo не перегружен множеством наворотов, вполне вероятно, что у него есть некоторые возможности, о которых вы не знали или забыли.

эхо? эхо!

Большинство систем Linux предоставляют две версии echo. В оболочку Bash встроен собственный echo, а также существует двоичная исполняемая версия echo.

Мы можем увидеть две разные версии, используя следующие команды:

type echo
whereis echo

Команда type сообщает нам, является ли команда, которую мы передаем ей в качестве аргумента, встроенной оболочкой, двоичным исполняемым файлом, псевдонимом или функцией. Он сообщает нам, что echo является встроенной оболочкой.

Как только ответ найден, type прекращает поиск дальнейших совпадений. Таким образом, это не говорит нам, есть ли в системе другие команды с таким же именем. Но он сообщает нам, какой из них он находит первым. И это тот, который будет использоваться по умолчанию, когда мы выполним эту команду.

Команда whereis ищет двоичный исполняемый файл, исходный код и справочную страницу для команды, которую мы передаем ей в качестве параметра командной строки. Он не ищет встроенные модули оболочки, потому что у них нет отдельного исполняемого бинарного файла. Они являются неотъемлемой частью исполняемого файла Bash.

Команда whereis сообщает, что echo — это двоичный исполняемый файл, расположенный в каталоге /bin.

Чтобы использовать эту версию echo, вам нужно явно вызвать ее, указав путь к исполняемому файлу в командной строке:

/bin/echo --version

Встроенная оболочка не знает, что такое аргумент командной строки --version, она просто повторяет его в окне терминала:

echo --version

Во всех показанных здесь примерах используется версия echo по умолчанию в оболочке Bash.

Запись текста в терминал

Чтобы написать простую строку текста в окно терминала, введите echo и строку, которую вы хотите отобразить:

echo My name is Dave.

Текст повторяется для нас. Но по мере экспериментов вы вскоре обнаружите, что все может быть немного сложнее. Посмотрите на этот пример:

echo My name is Dave and I'm a geek.

Окно терминала отображает знак  > и ждет. Ctrl+C вернет вас в командную строку. Что там произошло?

Одинарная кавычка или апостроф в слове «I’m» сбивает с толку echo. Он интерпретировал эту одиночную кавычку как начало цитируемого раздела текста. Поскольку он не обнаружил закрывающей одинарной кавычки, echo ожидал ввода дополнительных данных. Он ожидал, что дальнейший ввод будет включать отсутствующую одинарную кавычку, которую он ждал.

Чтобы включить одинарную кавычку в строку, самое простое решение — заключить всю строку в двойные кавычки:

echo "My name is Dave and I'm a geek."

Заключение текста в двойные кавычки — хороший общий совет. В сценариях он четко разграничивает параметры, которые вы передаете в echo. Это значительно упрощает чтение и отладку сценариев.

Что делать, если вы хотите включить символ двойной кавычки в строку текста? Это легко: просто поставьте перед двойными кавычками обратную косую черту \ (без пробела между ними).

echo "My name is Dave and I'm a \"geek.\""

Это заключает слово «компьютерщик» в двойные кавычки. Вскоре мы увидим больше этих символов, экранированных обратной косой чертой.

Использование переменных с эхом

До сих пор мы писали предопределенный текст в окно терминала. Мы можем использовать переменные с echo для получения более динамичного вывода со значениями, вставленными в него для нас оболочкой. Мы можем определить простую переменную с помощью этой команды:

my_name="Dave"

Была создана переменная с именем my_name. Ему было присвоено значение текста «Дэйв». Мы можем использовать имя переменной в строках, которые мы передаем в echo , и значение переменной будет записано в окно терминала. Вы должны поставить знак доллара $ перед именем переменной, чтобы echo знал, что это переменная.

Есть предостережение. Если вы заключили строку в одинарные кавычки, echo будет воспринимать все буквально. Чтобы отображалось значение переменной, а не ее имя, используйте двойные кавычки.

echo 'My name is $my_name'
echo "My name is $my_name"

Несколько метко стоит повторить:

  • Использование одинарных кавычек приводит к тому, что текст записывается в окно терминала буквально.
  • Использование двойных кавычек приводит к тому, что переменная интерпретируется (также называемая расширением переменной), а значение записывается в окно терминала.

Использование команд с эхом

Мы можем использовать команду с echo и включать ее вывод в строку, которая записывается в окно терминала. Мы должны использовать знак доллара $, как если бы команда была переменной, и заключать всю команду в круглые скобки.

Мы собираемся использовать команду даты. Один из советов — использовать команду отдельно, прежде чем вы начнете использовать ее с echo. Таким образом, если что-то не так с синтаксисом вашей команды, вы идентифицируете это и исправляете, прежде чем включать его в команду echo. Затем, если команда echo не делает того, что вы ожидаете, вы будете знать, что проблема должна быть связана с синтаксисом echo, поскольку вы уже проверили синтаксис команды.

Итак, попробуйте это в окне терминала:

date +%D

И, убедившись, что мы получаем то, что ожидаем от команды date, мы интегрируем ее в команду echo:

echo "Today's date is: $(date +%D)"

Обратите внимание, что команда заключена в круглые скобки, а знак доллара $ находится непосредственно перед первой скобкой.

Форматирование текста с эхом

Опция -e (включить экранирование обратной косой черты) позволяет нам использовать некоторые символы, экранированные обратной косой чертой, для изменения макета текста. Это символы с обратной косой чертой, которые мы можем использовать:

  • \a: оповещение (исторически известное как BEL). При этом генерируется звук оповещения по умолчанию.
  • \b: пишет символ возврата.
  • \c: отказ от дальнейшего вывода.
  • \e: пишет escape-символ.
  • \f: записывает символ перевода формы.
  • \n: пишет новую строку.
  • \r: пишет возврат каретки.
  • \t: пишет горизонтальную вкладку.
  • \v: пишет вертикальную вкладку.
  • \\: пишет символ обратной косой черты.

Давайте воспользуемся некоторыми из них и посмотрим, что они делают.

echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"

Текст разделяется на новую строку, где мы использовали символы \n, и вставляется табуляция, где мы использовали символы \t.

echo -e "Here\vare\vvertical\vtabs"

Подобно символам новой строки \n, вертикальная табуляция \v перемещает текст на строку ниже. Но, в отличие от \n символов новой строки, вертикальная вкладка \v не начинает новую строку с нулевого столбца. Он использует текущий столбец.

Символы возврата \b перемещают курсор на один символ назад. Если на терминал нужно записать больше текста, этот текст перезапишет предыдущий символ.

echo -e "123\b4"

«3» заменяется на «4».

Символ возврата каретки \r заставляет echo вернуться к началу текущей строки и записать любой дальнейший текст с нулевого столбца.

echo -e "123\r456"

Символы «123» заменяются символами «456».

Символ предупреждения \a будет издавать звуковой сигнал. Он использует звук оповещения по умолчанию для вашей текущей темы.

echo -e "Make a bleep\a"

Параметр -n (без новой строки) не является последовательностью, экранированной обратной косой чертой, но влияет на внешний вид текстового макета, поэтому мы обсудим его здесь. Он не позволяет echo добавлять новую строку в конец текста. Командная строка появляется сразу после текста, который записывается в окно терминала.

echo -n "no final newline"

Использование эха с файлами и каталогами

Вы можете использовать echo как своего рода версию ls для бедняков. У вас мало вариантов, когда вы используете echo таким образом. Если вам нужна какая-либо точность или точный контроль, вам лучше использовать ls и его легион опций.

Эта команда выводит список всех файлов и каталогов в текущем каталоге:

echo *

Эта команда выводит список всех файлов и каталогов в текущем каталоге, имя которых начинается с «D»:

echo D*

Эта команда выводит список всех файлов «.desktop» в текущем каталоге:

echo *.desktop

Ага. Это не использует сильные стороны echo. Используйте ls.

Запись в файлы с эхом

Мы можем перенаправить вывод из echo и либо создать текстовые файлы, либо записать в существующие текстовые файлы.

Если мы используем оператор перенаправления >, файл создается, если он не существует. Если файл существует, выходные данные echo добавляются в начало файла, перезаписывая любое предыдущее содержимое.

Если мы используем оператор перенаправления >>, файл создается, если он не существует. Вывод echo добавляется в конец файла и не перезаписывает существующее содержимое файла.

echo "Creating a new file." > sample.txt
echo "Adding to the file." >> sample.txt
cat sample.txt

Первой командой создается новый файл, и в него вставляется текст. Вторая команда добавляет строку текста в конец файла. Команда cat отображает содержимое файла в окне терминала.

И, конечно же, мы можем включить переменные, чтобы добавить в наш файл полезную информацию. Если файл является файлом журнала, мы можем захотеть добавить к нему временную метку. Мы можем сделать это с помощью следующей команды.

Обратите внимание на одинарные кавычки вокруг параметров команды date. Они предотвращают интерпретацию пробела между параметрами как конец списка параметров. Они обеспечивают правильную передачу параметров в date .

echo "Logfile started: $(date +'%D %T')" > logfile.txt
cat logfile.txt

Наш файл журнала создан для нас, и cat показывает нам, что к нему были добавлены и метка даты, и метка времени.

Это репертуар эха

Простая команда, но необходимая. Если бы его не было, нам пришлось бы его изобрести.

В конце концов, махинации Зевса принесли пользу.

RELATED: Best Linux Laptops for Developers and Enthusiasts