Объяснение команды 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 с примерами