В Bash вы можете сделать:
$ printf '%q' 'echo "argument with spaces"'
В оболочке POSIX %q
из printf
не определено.Недавно я начал использовать скрипт sed, похожий на ваш:
$ printf '%s' 'echo "argument with spaces"' | sed -e "s/'/'\\\\''/g" -e "1 s/^/'/" -e "$ s/$/'/"
Идея заключается в том, чтобы заключить текст в '
.Тогда вам нужно только избежать '
, которые уже были там.
Я также использую его как исполняемый файл:
#!/bin/sed -f
# usage: $0
# make this:
#
# echo "'special chars'"
#
# into this:
#
# 'echo "'\''special chars'\''"'
#
# escape all '
s/'/'\\''/g
# enclose in '
1 s/^/'/
$ s/$/'/
Время покажет, является ли оно жизнеспособным.* Я столкнулся с несколькими проектами для решения этой проблемы, хотя большинство из них показались мне слишком сложными на мой вкус.Вот почему я сделал свой собственный.