Bash-скрипт — подстановка команд

Опубликовано: 30 Сентября, 2022

Чтобы понять подстановку команд, давайте сначала обсудим подстановку в сценариях оболочки. Подстановка — это функция, следуя которой мы можем указать оболочке заменить фактическое значение выражения.

Пример:

В приведенной ниже программе мы сначала создали переменную str и присвоили ей значение «GeeksforGeeks», а затем заменили значение строки str («GeeksforGeeks») в команде echo.

//myStript.sh

#!/bin/sh
 
str="GeeksforGeeks"
echo -e "str: $str"

Выход:

В этой статье основное внимание уделяется технике подстановки команд, используемой в сценарии Bash.

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

Escape-последовательности Значение
новая линия
р возврат каретки
т горизонтальная вкладка
б назад
\ обратная косая черта

Подстановка команд

Подстановка команд — это механизм, которому следуют программисты в сценарии bash. В этом механизме вывод команды заменяет саму команду. Bash выполняет расширение, выполняя команду, а затем заменяя подстановку команды стандартным выводом команды. Проще говоря, вывод команды UNIX объединяется и затем используется как команда.

Чтобы лучше понять это, давайте рассмотрим пример. Команда seq в Linux используется для печати чисел от START до END с шагом INCREMENT.

Синтаксис:

seq START INCREMENT END  

Тип возврата:

Prints numbers from START to END each in the new line by the difference of INCREMENT.

Пример:

В приведенном ниже сценарии мы печатаем числа от 2 до 20 с разницей в 2. Другими словами, мы печатаем четные числа до 20.

#!/bin/bash
# your code goes here
 
seq 2 2 20

Выход:

Мы можем использовать вывод вышеуказанной команды в качестве новой команды. Рассмотрим приведенный ниже сценарий,

Пример:

#!/bin/bash
# your code goes here
 
echo $(seq 2 2 20)

Выход:

Переменные и расширение команд

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

Пример:

В приведенном ниже сценарии мы присвоили результат команды echo обеим строкам в переменных, «varaiable1» и «variable2» соответственно. Затем мы использовали эти переменные в команде echo.

#!/bin/bash

variable1=$(echo "Full form of gfg is" )
variable2=$(echo "GeekforGeeks")
echo "$variable1 : $variable2"

Выход:

Потеря новых строк при подстановке команд

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

Пример:

В этом скрипте мы используем команду seq. Теперь команда seq выводит числа на консоль и добавляет символ новой строки после вывода каждого числа на консоль.

#!/bin/bash
# your code goes here
 
seq 1 2 19

Выход:

Пример:

В этом скрипте мы использовали результат вышеприведенной команды и подставили его в команду. Как видно из вывода, в консоль выводятся числа от 1 до 19 с разницей в 2. Но на этот раз все они печатаются в одной строке без символа новой строки.

#!/bin/bash
# your code goes here
 
echo $(seq 1 2 19)

Выход: