Мне нужна команда bash, которая преобразует строку во что-то экранированное. Вот пример:
echo "hello\world" | escape | someprog
Если команда побег делает "hello\world"
в "hello\\\world"
. Затем someprog может использовать "hello\\world"
как ожидает. Конечно, это упрощенный пример того, чем я действительно буду заниматься.
Ответы:
В Баше:
например:
Это также можно использовать через переменные:
источник
%q
был сломан более десяти лет, примерно до 2012 года. У него были проблемы с~
. Есть также переносные однострочные sed stackoverflow.com/a/20053121/1073695a='abc$def":'; printf '%q\n' "$a"
приводит кabc\$def\":
(знак доллара экранирован). Это Bash 4.3 (я получил тот же результат в Bash 3.2). Какую версию ты используешь?printf "%q" 'he$l&lo\world'
printf '%q\n' text
цитирует текст вbash
формате (и для текущей локали), так что это будет работать только в случае OP, если уsomeprog
них будет точно такой же синтаксис цитирования,bash
что и маловероятно.Чистый Bash, используйте подстановку параметров:
источник
Вы можете использовать perl для замены различных символов, например:
В зависимости от характера вашего побега вы можете объединить несколько вызовов, чтобы избежать нужных символов.
источник