Практическое написание сценариев командной оболочки Bash/Bash подстановки: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 210:
В предыдущем примере, вместо ожидаемой строки <code>"one two"</code>, мы получаем только <code>"one"</code>. Здесь накладываются следующие факторы:
* Особенность работы команды <code>printf</code>, которая может принимать много аргументов: в первом аргументе должна быть форматная строка, а в каждом последующем должна быть подстановка для формата в форматной строке. Таким образом, любые строки, передаваемые в первом аргументе <code>printf</code> всегда должны заключаться в кавычки, если они имеют пробелы или символы поля <code>IFS</code>.
* Забытые кавычки вокруг второго уровня. Команда <code>printf</code> на втором уровне выполнится правильно и вернет на первый уровень строку <code>"one two"</code>. Но, так как, самые внешние кавычки не отвечают за первый уровень вложенности, команда <code>printf</code> получит два аргумента из-за разбиения одной строки на два слова: форматную строку <code>one</code> и подстановку для формата <code>two</code>. Так как в форматной строке нет ни одного формата, <code>printf</code> игнорирует все аргументы, начиная со второго.
 
Обратите внимание, что эту ошибку можно исправить двумя путями: