Подстановка команд в bash – это не что иное, как передача вывода одной команды другой для использования в различных случаях.
Звучит сложно?
Позвольте мне привести небольшой пример:
# Получение текущей даты с помощью команды date current_date=$(date) # Вывести текущую дату echo "Сегодняшняя дата: $current_date"
Приведенный выше скрипта bash просто использует команду date и передает вывод в переменную current_date.
В дальнейшем переменная current_date была использована в операторе echo для вывода текущей даты.
Если вы внимательно посмотрите, я использовал $(…) вокруг команды date, которая перехватывала вывод команды date и передавала его в переменную current_date.
Да, это один из способов подстановки команд в bash, но есть и другие.
Давайте посмотрим.
Как заменять команды в bash
В bash существует два способа замены команд:
- С помощью долларовых скобок $()
- Использование обратных скобок (“)
В этом руководстве я расскажу о том, как можно использовать оба способа замены команд, а также о том, как это можно сделать во вложенном виде.
Начнем с первого.
Подстановка команд с помощью долларовых скобок $()
Чтобы использовать долларовые скобки для подстановки команд, достаточно следовать приведенному синтаксису команды:
Variable=$(command)
Можно также добавить дополнительный текст для поддержки вывода команды, как показано здесь:
Variable="Optional text $(command)"
Позвольте мне привести простой пример.
Здесь я использовал команду whoami для поиска текущего вошедшего в систему пользователя с помощью команды echo:
echo "The current user is: $(whoami)"
Можно также присвоить переменной целое значение и затем использовать его
#!/bin/bash
current_user=$(whoami)
echo "The current user is: $current_user"
Если интересно, то вот ожидаемый результат после выполнения приведенного выше cкрипта:
The current user is: $root
Хотя вывод похож на предыдущий пример, в этом скрипте я подставил значение команды whoami и передал его в переменную current_user.
Позже я использовал ее в операторе echo.
В качестве альтернативы можно использовать несколько подстановок команд.
Например, здесь я использовал ее два раза для оператора echo:
echo "Hello, $(whoami)! You are running this script on $(date)."
Замена команд с помощью обратных знаков (“ )
Метод обратных знаков считается устаревшим и в настоящее время не рекомендуется. Однако в старых книгах на него еще можно найти ссылки.
Это еще один способ подстановки команд в bash.
Чтобы использовать обратные знаки для подстановки команд, просто следуйте приведенному синтаксису команды:
variable=`command`
Если вы хотите использовать его с дополнительным текстом, то это также можно сделать, используя следующее:
variable="Additional text `date`"
Для демонстрации этого я использовал простой bash-скрипт:
#!/bin/bash
result=`echo "5 + 7" | bc`
echo "The result of the calculation is: $result"
В приведенном выше скрипте я использовал команду bc и передал ее в команду echo для вычисления сложения двух чисел и сохранения его в переменной result.
В дальнейшем результат был выведен с помощью оператора echo.
Вот что можно ожидать при выполнении приведенного выше сценария:
The result of the calculation is: 12
Использование обратных знаков для множественных замен
Чтобы использовать обратные знаки для нескольких подстановок, используйте следующий синтаксис:
result=`command1 \`command2\` command3\`
Да, каждую команду необходимо разделять обратным слешем (\).
Если вы хотите добавить дополнительный текст, то это будет выглядеть следующим образом:
result= `command1 \ "Additional text `command2\` Some more text here `command3\`"`
Проще говоря, вы можете добавить текст в любом месте синтаксиса между “”.
Например, здесь я использовал обратные знаки для множественных подстановок, чтобы получить текущую дату и вычислить сложение:
result=`echo "Today is \`date\`, and the result of the calculation is \`echo 5 + 7 | bc\`."`
echo "$result"
см. также:
- 📜 Чтение файла построчно на Bash
- 📜 Получение вчерашней даты в Bash: Практическое руководство
- 🐧 Что означает -z на Bash
- 🐧 Проверка, содержит ли переменная число на Bash
- 📜 Сравнение строк на Bash