Escape characters interpreted specially by the shell.
Function:
(defun string-escape-for-shell (str) (declare (xargs :guard (stringp str))) (b* ((str (str::strsubst "\\" "\\\\" str)) (str (str::strsubst "\"" "\\\"" str)) (str (str::strsubst "$" "\\$" str)) (str (str::strsubst "`" "\\`" str)) (str (str::strsubst "!" "``!" str)) (str (str::strsubst " " "\\ " str)) (str (str::strsubst ";" "\\;" str)) (str (str::strsubst "|" "\\|" str)) (str (str::strsubst "&" "\\&" str)) (str (str::strsubst "<" "\\<" str)) (str (str::strsubst ">" "\\>" str)) (str (str::strsubst "{" "\\{" str)) (str (str::strsubst "}" "\\}" str)) (str (str::strsubst "[" "\\[" str)) (str (str::strsubst "]" "\\]" str)) (str (str::strsubst "*" "\\*" str)) (str (str::strsubst "?" "\\?" str)) (str (str::strsubst "~" "\\~" str))) str))
Theorem:
(defthm stringp-of-string-escape-for-shell (b* ((str$ (string-escape-for-shell str))) (stringp str$)) :rule-classes :rewrite)