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

Объяснение команды Bash Echo в Linux

Будучи новичком, когда вы начинаете работать со сценариями Bash, первая команда, которую вы, вероятно, выучите и будете использовать, — это команда echo. Вы можете думать о команде bash echo как о чем-то похожем на команду print в других языках программирования. Команда echo является встроенной в bash, и ее цель — вывести выходные данные на стандартный вывод (т. е. в терминал).

В этой статье я покажу вам, что такое команда bash echo и как ее использовать в сценариях оболочки. Прежде чем мы углубимся в эту тему, давайте посмотрим на разницу между встроенной программой Bash и внешней командой.

Встроенная команда echo против внешней команды echo

В Linux и других Unix-подобных системах некоторые команды предоставляются как встроенные, так и внешние команды. Например, /bin/echo — это внешняя команда, имеющая то же имя, что и встроенная команда echo bash.

Когда мы вызываем команду, которая существует и как встроенная, и как внешняя команда, обычно встроенная команда выполняется по умолчанию. Поскольку порядок приоритета имен команд следующий: псевдоним, затем функция, затем встроенный и затем внешняя команда в каталогах, перечисленных в . ` PATH по порядку.

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

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

echo <some-text>

Следующий код вызывает внешнюю команду echo:

/bin/echo <some-text>

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

$ type echo 
echo is a shell builtin

Чтобы отобразить все местоположения, содержащие указанный исполняемый файл, используйте флаг -a:

$ type -a echo 
echo is a shell builtin
echo is /usr/bin/echo

Более подробную информацию об использовании команды type можно найти по следующей ссылке:

  • Учебное пособие по командам Type с примерами для начинающих

В этом руководстве мы будем обсуждать встроенную команду echo bash, а не внешнюю.

Отобразить справку по команде bash echo

Почти все команды Linux имеют справочную страницу или раздел справки, где можно понять, как использовать эту команду. Справочное руководство по команде echo включено в страницу руководства Bash.

Чтобы получить доступ к странице руководства для команды bash, выполните:

man bash

Теперь введите /echo и нажимайте n, пока не увидите раздел справки по команде echo.

Справка по команде Bash echo

Альтернативно вы можете использовать следующую однострочную команду для отображения раздела справки команды echo:

man bash | less --pattern='^ *echo +\['

Структура команды echo

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

echo [-neE] [arg ...]

-n → Do not append a new line
-e → enable interpretation of backslash escapes
-E → disable the interpretation of backslash escapes (default)

Давайте пока пропустим три необязательных аргумента и посмотрим, как использовать echo для вывода текста на стандартный вывод (терминал).

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

$ echo "Hello World"
Hello World

Распечатать текст с помощью команды echo

Взгляните на приведенный выше пример. Это традиционная программа hello world, которую мы запускаем всякий раз, когда изучаем новый язык, и запускаем ее в качестве первого кода. Команда echo принимает текст "hello world" в качестве аргумента и выводит его на терминал (Stdout).

Как подавить символ новой строки

По умолчанию команда bash echo автоматически добавляет новую строку (\n). Запустите ту же программу hello world еще раз и обратите внимание, что приглашение терминала отобразится в новой строке.

$ echo "Hello world"
Hello world

Теперь, если вы хотите подавить это поведение, вы можете использовать флаг "-n", который будет подавлять новую строку, и приглашение терминала будет напечатано в той же строке, как показано ниже.

$ echo -n "Hello world"
Hello world

Подавить символ новой строки с помощью echo

Что происходит, когда аргумент не передается

Если команде echo не передается аргумент, команда не завершится ошибкой, а вернет пустую новую строку. Запустите свой терминал и запустите "echo", и вы увидите, что он просто печатает пустую строку и завершает работу.

echo
echo $?
0

Вы можете переопределить это поведение, добавив флаг "-n", который не будет печатать новую строку, даже если не будет передан аргумент.

echo -n 

Запустить echo без каких-либо опций

Где это будет полезно? Вы можете задаться вопросом. Если вам нужны пустые строки между выводами, вы можете использовать echo без аргументов.

Работа с переменными и командами

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

Сначала переменная env "SHELL" передается команде echo, и она печатает значение переменной.

# Environmental Variable:

echo " I am currently using ${SHELL}"
I am currently using /bin/bash

Во-вторых, определяемая пользователем переменная "NAME" передается команде echo, и ее значение выводится на терминал.

# User Defined Variable:

NAME="PoP_OS"
echo "I am using ${NAME}"
I am using PoP_OS

Вы также можете запускать команды внутри аргументов. Взгляните на приведенный ниже пример, где команда "uname -r" передается в качестве аргумента, команда интерпретируется и выводятся выходные данные.

echo "KERNEL_VERSION=$(uname -r)"
KERNEL_VERSION=5.11.0-7620-generic

Расширение переменных и команд

Влияние использования одинарных и двойных кавычек

Во всех предыдущих примерах вы могли заметить, что я заключал аргументы в двойные кавычки. Что же произойдет, если аргумент не заключен в кавычки? Echo Command не даст сбоя, и вы получите тот же результат.

Посмотрите на следующий пример. Я запускаю ту же команду, которую использовал в предыдущем разделе, но без кавычек, и она печатает выходные данные без каких-либо ошибок.

$ echo I am using ${NAME}
I am using Pop_OS

Использование echo без кавычек

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

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

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

Посмотрите на пример ниже. Когда я заключаю аргумент в одинарные кавычки, переменная "NAME" не интерпретируется и не обрабатывается как текст.

# SINGLE QUOTES

echo 'I am using ${NAME}'
I am using ${NAME}

# DOUBLE QUOTES

echo "I am using Linux ${NAME}"
I am using Linux PoP_OS

Использование echo с одинарными и двойными кавычками

Перенаправление вывода и конвейеризация

Как говорилось ранее, команда echo по умолчанию выводит вывод на стандартный вывод (терминал). Когда вы пишете сценарии оболочки, вы можете оказаться в ситуации, когда нужно сохранить вывод команды echo в файл. Вы можете сделать это с помощью оператора перенаправления bash.

echo "Welcome to OSTechNix" > /tmp/op.log
$ cat /tmp/op.log
Welcome to OSTechNix

Рекомендуем прочитать:

  • Перенаправление Bash, объясненное примерами
  • Руководство по Bash Heredoc для начинающих

Вы также можете отправить вывод команды echo в pipe для дальнейшей обработки.

$ echo "I am using ${NAME}"
I am using PoP_OS
$ echo "I am using ${NAME}" | grep -i -o POP
PoP

Конвейерный вывод команды echo

Многострочная строка

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

echo "This is Line 1
This is Line 2
This is Line 3"

Передача многострочной строки с помощью команды echo

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

echo "I am running \
the echo command \
again"

Пример вывода:

I am running the echo command again

Распечатать многострочную строку в одну строку с помощью команды echo

Это характерно не только для команды bash echo. Вы можете использовать этот подход для создания многострочных очень больших команд для лучшей читаемости.

Обратная косая черта ускользает от интерпретации

Команда echo принимает в качестве аргументов множество экранированных символов. Чтобы эти специальные символы распознавались командой echo, необходимо передать флаг "-e". Список поддерживаемых специальных символов можно получить на странице руководства команды echo.

Список поддерживаемых специальных символов

Вы не будете использовать все специальные символы в повседневной жизни. В основном вы будете использовать символы новой строки, табуляции и escape-символы обратной косой черты.

Символ новой строки — \n

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

echo -e "This is the first line\nThis is the second Line\nThis is the third line"

Пример вывода:

This is the first line
This is the second Line
This is the third line

Горизонтальная вкладка - \t

При использовании \t будут добавлены пробелы табуляции. Вы также можете объединить несколько escape-символов, как я сделал ниже.

echo -e "Enter the U_NAME\t:\n"
Enter the U_NAME    :

Вертикальная вкладка — \v

Чтобы создать вкладки вертикально, используйте \v.

echo -e "Enter the username\vEnter the password"
Enter the username
                  Enter the password

Подавить вывод - \c

При использовании \c все, что идет после \c, будет подавлено.

echo -e "I am using \cCosmic Desktop"
I am using

Возврат каретки - \r

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

$ echo -e "I use Arch, \rBtw"
Btwse Arch, 

Отключить обратную косую черту, позволяющую избежать интерпретации

По умолчанию команда echo обрабатывает специальные символы как обычный текст, если не указан флаг -e. Того же поведения можно добиться, используя флаг -E.

Я покажу вам пример.

Позвольте мне запустить команду echo без каких-либо флагов:

$ echo "Welcome to OSTechNix \nblog"
Welcome to OSTechNix \nblog

Затем я запускаю ту же команду с флагом -E:

$ echo -E "Welcome to OSTechNix \nblog"
Welcome to OSTechNix \nblog

Как видите, результат аналогичен, когда я запустил команду echo с флагом -E и без какого-либо флага. В обоих случаях команда echo обрабатывает специальный символ /n как обычную строку.

Теперь позвольте мне снова запустить ту же команду, но на этот раз с флагом -e.

$ echo -e "Welcome to OSTechNix \nblog"
Welcome to OSTechNix
blog

Вы заметили разницу? Команда echo не интерпретировала символ /n как обычный текст и отображает все, что следует после специального символа /n, в новой строке.

Поэтому, если вы хотите использовать какие-либо специальные символы, такие как \n, \t, \v и т. д., вам следует использовать - флаг e. В противном случае echo будет воспринимать все как обычную строку.

Позвольте мне показать вам еще один пример.

$ echo -e "Hello world\nHello World\nHello World"
Hello world
Hello World
Hello World

Как вы видите в приведенном выше выводе, команда echo отображает строку "Hello World" три раза, один за другим (т.е. с новой строки).

Что, если вы хотите экранировать только определенный специальный символ? Здесь на помощь приходит двойная обратная косая черта (\\).

Например, я хочу экранировать третий специальный символ /n в предыдущей команде.

Для этого я собираюсь поставить перед третьим специальным символом двойную обратную косую черту (\\), как показано ниже:

$ echo -e "Hello world\nHello World\\\nHello World"
Hello world
Hello World\nHello World

Теперь команда echo обрабатывает третий специальный символ \n как обычную строку.

Поэтому, если у вас много специальных символов и вы хотите экранировать только определенный специальный символ, вам необходимо добавить двойную обратную косую черту (\\) перед этим специальным символом.

Заключение

В этой статье мы увидели, что такое команда echo и различные способы ее использования. Это очень простая команда, и без использования команды echo не будет сценария оболочки, если только вы не решите использовать printf, который является альтернативой echo. команда в bash.

Связанное чтение:

  • Скрипты Bash: переменные, поясняемые примерами
  • Скрипты Bash: функции, поясняемые примерами
  • Скрипты Bash: цикл For с примерами
  • Скрипты Bash: циклы while и Until с примерами

Статьи по данной тематике