Подстановка команд — это подстановка результатов выполнения команды [1] или даже серии команд; буквально, эта операция позволяет вызвать команду в другом окружении.
Классический пример подстановки команд — использование обратных одиночных кавычек (`. `). Команды внутри этих кавычек представляют собой текст командной строки.
Вывод от команд может использоваться: как аргумент другой команды, для установки значения переменной и даже для генерации списка аргументов цикла for.
Подстанавливаемая команда может получиться разбитой на отдельные слова.
Даже когда не происходит разбиения на слова, операция подстановки команд может удалять завершающие символы перевода строки.
При выводе значений переменных, полученных в результате подстановки команд, командой echo, без кавычек, символы перевода строки будут удалены. Это может оказаться неприятным сюрпризом.
Подстановка команд позволяет даже записывать в переменные содержимое целых файлов, с помощью перенаправления или команды cat.
Не используйте переменные для хранения содержимого текстовых файлов большого объема, без веских на то оснований. Не записывайте в переменные содержимое бинарных файлов, даже шутки ради.
Пример 14-1. Глупая выходка
Обратите внимание: в данной ситуации не возникает ошибки переполнения буфера . Этот пример показывает превосходство защищенности интерпретирующих языков, таких как Bash, от ошибок программиста, над компилирующими языками программирования.
Подстановка команд, позволяет записать в переменную результаты выполнения цикла. Ключевым моментом здесь является команда echo, в теле цикла.
Пример 14-2. Запись результатов выполнения цикла в переменную
Подстановка команд позволяет существенно расширить набор инструментальных средств, которыми располагает Bash. Суть состоит в том, чтобы написать программу или сценарий, которая выводит результаты своей работы на stdout (как это делает подавляющее большинство утилит в UNIX) и записать вывод от программы в переменную.
Альтернативой обратным одиночным кавычкам, используемым для подстановки команд, можно считать такую форму записи: $(COMMAND).
Содержание
- Определение переменных в Bash
- Системные переменные
- Использование переменных
- 5 ответов:
Определение переменных в Bash
Переменные в Bash позволяют хранить в себе определенные числовые или текстовые значения.
Для объявления переменной достаточно написать ее имя и значение, которое она в себе будет хранить. При обращении к переменной, нужно предварять ее знаком доллара — $ :
Не ставьте пробелы до и после знака равенства — = , т.к. в этом случае оболочка может ошибочно принять имя переменной за имя команды.
Правильно: my_var=45
Неправильно: my_var = 45
Системные переменные
Изначально в Bash доступен набор переменных, которые были определены разработчиками оболочки. Эти переменные предназначены для хранения настроек оболочки. Переопределяя значения системных переменных, вы сможете изменить конфигурацию командной оболочки.
В именах системных переменных принято использовать только заглавные буквы, а слова отделяются символом подчеркивания, например PS1 , PATH , BASH_VERSION и др.
Узнать список системных переменных можно с помощью следующих команд.
Использование переменных
Переменные часто используются в вывод строк. Чтобы указать переменную в строке укажите ее внутри двойных кавычек.
этот вопрос уже есть ответ здесь:
у меня проблема с размещением содержимого pwd команда в переменную оболочки, которую я буду использовать позже.
вот мой код оболочки (цикл не делает стоп):
не могли бы вы заметить мою ошибку, пожалуйста?
5 ответов:
обратите внимание на отсутствие пробелов после знака равенства.
также, как указывает г-н Вайс; вы не назначаете $pwd , назначить pwd .
в оболочке вы присваиваете переменной без знака доллара:
это лучше (и может быть вложенным), но не так портативно, как backtics:
всегда помните: знак доллара используется только при чтении переменной.
в этом конкретном случае обратите внимание, что bash имеет переменную с именем PWD который содержит текущий каталог: $PWD эквивалентно `pwd` . (Так же как и другие оболочки, это стандартные функции.) Так что вы можете написать свой скрипт так:
обратите внимание на использование двойных кавычек вокруг ссылок на переменные. Они необходимы, если переменная (здесь, текущий каталог) содержит пробелы или подстановочные знаки ( [?* ), потому что оболочка шпагат результат переменной, разложения на слова и выполняет подстановку на эти слова. всегда двойные кавычки переменные расширения «$foo» и команду замены «$(foo)» (если вы специально не знаете, что вы не должны).
В общем случае, как уже упоминалось в других ответах:
- вы не можете использовать пробелы вокруг знака равенства в задание: var=value , а не var = value
- The $ означает «возьмите значение этой переменной», поэтому вы не используете его при назначении: var=value , а не $var=value .
вы также можете сделать более сложные команды, просто чтобы закруглить примеры выше. Итак, скажем, я хочу получить количество процессов, запущенных в системе, и сохранить его в $ переменной.
все, что вам нужно, так это создать командный конвейер и поместить его вывод (количество процессов) в переменную.
это выглядит примерно так:
Я надеюсь, что это поможет добавить некоторую полезную информацию к этому обсуждению.
Источник: