В bash встроенная функция printf
имеет дополнительный спецификатор формата % q
, который печатает соответствующий аргумент удобным способом:
В дополнение к стандартному printf (1 ) форматы,
% b
заставляет printf расширять escape-последовательности обратной косой черты в соответствующем аргументе (за исключением того, что\ c
завершает вывод, обратная косая черта в\ '
,\ "
и\?
не удаляются, а восьмеричные escape-последовательности, начинающиеся с\ 0
, могут содержать до четырех цифр), а% q
вызывает printf для вывода соответствующего аргумента в формате, который можно повторно использовать в качестве входных данных оболочки.
Таким образом, вы можете сделать что-то вроде этого:
printf %q "$VARIABLE"
printf %q "$(my_command)"
, чтобы получить содержимое переменной или выходные данные команды в формате, который можно безопасно передавать снова в качестве ввода (т. е. экранированные пробелы). Например:
$ printf "%q\n" "foo bar"
foo\ bar
(я добавил новую строку, чтобы она была удобна в интерактивной оболочке.)