переменная в bash, содержащая подстановку команд

Предполагая, что ваш CUPS установлен на Linux и установлен со всеми компонентами по пути по умолчанию. Затем посмотрите файл

/var/log/cups/page_log

Этот файл содержит всю информацию о заданиях, выполненных CUPS. Чтобы понять формат файла, взгляните на

Каждая строка в файле сообщает вам для каждого задания, копирования и страницы следующую информацию (, если ее формат не настроен):

  1. Имя принтера
  2. Имя пользователя
  3. Задание -ИД
  4. Дата+время распечатки
  5. Номер страницы
  6. Номер копии
  7. Информация о выставлении счетов за работу (, если она отправлена ​​)
  8. Имя хоста клиента печати
  9. Имя задания (, если указано)
  10. Имя носителя (, если указано)
  11. Стороны :односторонние -или двусторонние -? (при наличии)

2
21.10.2021, 13:40
1 ответ

$(…) — подстановка команды («подстановка процесса» — <(…)и тому подобное ). Подстановки переменных и подстановки команд происходят в одном и том же проходе слева направо в строке. Единственное, что происходит в результате этих замен, — это разбиение слов и подстановка.

Итак, x='$(id)'устанавливает xв строку из 5 -символов $(id). Затем для запуска $xоболочка заменяет $xзначением $(id). Оно не содержит пробелов или подстановочных символов, поэтому оно рассматривается как имя команды.

В отличие от:

x='@(id)'
shopt -s extglob
echo /none/$x /usr/bin/$x

Предполагая, что файл /none/idне существует, а /usr/bin/idсуществует, команда echoрасширяется до трех слов:echo(очевидно ),/none/@(id)(шаблон глобуса /none/@(id)не соответствует что угодно, поэтому он остается неизменным ), а/usr/bin/id(шаблон глобуса /usr/bin/@(id)соответствует одному файлу, поэтому он заменяется одним -списком совпадений элементов ).

В руководстве bash соответствующее предложение находится в начале раздела Расширения оболочки .

The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and filename expansion.

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

Имейте в виду, что одно предложение (, даже такое сложное, как приведенное выше ), не может рассказать всей истории. Семантика оболочки запутана. Я сомневаюсь, что в руководстве по какой-либо оболочке есть подробности обо всех угловых случаях. Спецификация POSIX является более формальной, но не распространяется на расширения, специфичные для bash -, и даже оставляет неопределенными некоторые действительно странные случаи.

5
21.10.2021, 14:19

Теги

Похожие вопросы