#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: shesc [CONTENT...] shesc -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message CONTENT a literal string to be escaped Convert data to/from POSIX sh double quote string escaping. If CONTENT is not given, get data from STDIN. Examples: Escape sh control characters in a string: $ printf 'content="%s"\n' "$(shesc '"string" $(dollar "`cmd`") \ ')" content="\"string\" \$(dollar \"\`cmd\`\") \\ " Escape the content from a file: $ shesc < file.conf EOF } for flag in "$@"; do case "$flag" in (--) break ;; (--help) usage help exit ;; (*) ;; esac done while getopts 'h' flag; do case "$flag" in (h) usage help exit ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) esc() { sed 's|\([\\`"$]\)|\\\1|g' } if [ $# = 0 ]; then esc else for s in "$@"; do printf '%s\n' "$s" | esc done fi