В каждом Linux есть мощная оболочка, которая используется для выполнения команд и скриптов. Но чаще всего новички сталкиваются с трудностями при подстановке значения переменной оболочки в другой сценарий оболочки или команду, используя подстановку параметров ${}. Они также затрудняются подставить другую команду в shell-скрипт, используя подстановку команды $(). В этой статье мы узнаем, что означает
Что означают ${} и $() в сценарии командного интерпретатора
Подстановка команды и подстановка параметра - две самые мощные функции в сценарии оболочки.
Подстановка/расширение команд
Подстановка команды позволяет заменить команду в сценарии оболочки на вывод команды. Вот синтаксис для этого.
1 | $(команда) |
или
1 | `команда` |
Вот простой пример замены вывода команды date на ее ввод.
1 2 | echo $(date) echo `date` |
Вы также можете присвоить результат подстановки команды другой переменной. Вот пример, в котором мы присваиваем значение команды date переменной TODAY.
1 2 | TODAY=$(date) echo "$TODAY" |
Подстановку команд можно также использовать в циклах shell. Вот пример, в котором нужно перебрать все файлы .txt в определенной папке и вывести содержимое каждого файла.
1 2 3 4 | for f in /home/*.txt do echo "$f" done |
Вы также можете использовать подстановку команд в сценарии оболочки. Вот пример, в котором мы просто включили все вышеперечисленные команды оболочки в сценарий оболочки. Сначала мы создадим пустой файл сценария командной оболочки commands.sh
1 | nano commands.sh |
Затем добавим в него следующие строки.
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/sh echo $(date) echo `date` TODAY=$(дата) echo "$TODAY" for f в /home/*.txt do echo "$f" done |
Сохраните и закройте файл. Сделайте его исполняемым.
1 | chmod +x commands.sh |
Запустите сценарий оболочки с помощью следующей команды.
1 | ./commands.sh |
Подстановка/расширение параметров
Подстановка параметра - это когда мы просто заменяем переменную ее значением. Это похоже на подстановку команды, но в данном случае это прямая подстановка без какой-либо оценки, как в случае с подстановкой команды. Вот синтаксис для подстановки/расширения параметров.
1 | ${параметр} |
Вот пример расширения параметра, где мы заменяем значение имени переменной ее значением.
1 2 | name="john doe" echo "${name}" |
Вам может быть интересно, в чем разница между $variable и ${variable}, поскольку $variable также заменяет переменную ее значением. Использование фигурных скобок помогает shell правильно интерпретировать переменную в случае, если есть что-то, что следует сразу за переменной. Поясним это на примере. Посмотрите на следующую команду.
1 2 | name="john doe" echo "Имя человека - $name_". |
В команду echo не будет подставлено значение переменной $name. Это происходит потому, что shell ищет переменную name_, а не name. Если вы выполните следующую команду
1 | echo "The name of the person is ${name}_" |
Вы также можете задать значения по умолчанию для подстановки переменной, чтобы если она имеет нулевое значение, то подставлялось значение по умолчанию.
${variable} | Эта команда подставляет значение переменной. |
${variable:-word} | Если переменная равна null или если она не установлена, слово заменяется на переменную. Значение переменной не изменяется. |
${variable:=word} | Если переменная равна нулю или не установлена, значение переменной устанавливается в слово и также используется для замены. |
${variable:?message} | Если переменная равна null или не задана, сообщение выводится в стандартную ошибку bash. |
${variable:+word} | Если переменная установлена, слово заменяется на переменную. Однако значение самой переменной не изменяется. |
Заключение
В этой статье мы узнали о подстановке команд, а также о подстановке параметров. Они обе являются замечательными возможностями оболочки Linux и помогают сэкономить много кода. Но будьте осторожны с их синтаксисом, поскольку замена одного символа на другой полностью изменит смысл выражения. Например, использование круглых скобок вместо фигурных или использование - вместо + может привести к совершенно другим результатам.