Ответ 1
С 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
(Я добавил новую строку, чтобы она была довольно в интерактивной оболочке.)