Что означают ${} и $() в сценариях Bash

В каждом Linux есть мощная оболочка, которая используется для выполнения команд и скриптов. Но чаще всего новички сталкиваются с трудностями при подстановке значения переменной оболочки в другой сценарий оболочки или команду, используя подстановку параметров ${}. Они также затрудняются подставить другую команду в shell-скрипт, используя подстановку команды $(). В этой статье мы узнаем, что означает

Что означают ${} и $() в сценарии командного интерпретатора

Подстановка команды и подстановка параметра - две самые мощные функции в сценарии оболочки.

Подстановка/расширение команд

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

или

Вот простой пример замены вывода команды date на ее ввод.

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

Подстановку команд можно также использовать в циклах shell. Вот пример, в котором нужно перебрать все файлы .txt в определенной папке и вывести содержимое каждого файла.

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

Затем добавим в него следующие строки.

Сохраните и закройте файл. Сделайте его исполняемым.

Запустите сценарий оболочки с помощью следующей команды.

Подстановка/расширение параметров

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

Вот пример расширения параметра, где мы заменяем значение имени переменной ее значением.

Вам может быть интересно, в чем разница между $variable и ${variable}, поскольку $variable также заменяет переменную ее значением. Использование фигурных скобок помогает shell правильно интерпретировать переменную в случае, если есть что-то, что следует сразу за переменной. Поясним это на примере. Посмотрите на следующую команду.

В команду echo не будет подставлено значение переменной $name. Это происходит потому, что shell ищет переменную name_, а не name. Если вы выполните следующую команду

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

${variable} Эта команда подставляет значение переменной.
${variable:-word} Если переменная равна null или если она не установлена, слово заменяется на переменную. Значение переменной не изменяется.
${variable:=word} Если переменная равна нулю или не установлена, значение переменной устанавливается в слово и также используется для замены.
${variable:?message} Если переменная равна null или не задана, сообщение выводится в стандартную ошибку bash.
${variable:+word} Если переменная установлена, слово заменяется на переменную. Однако значение самой переменной не изменяется.

Заключение

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий