在bash中,您可以使用printf "%q"
来转义字符串中的特殊字符。为了清楚起见,我在以下示例中添加了换行符:
$ printf "%q\n" "foo"
foo
$ printf "%q\n" 'foo$bar'
foo\$bar
$ printf "%q\n" "foo bar" # Tab entered with Ctrl+V Tab
$'foo\tbar'
您可以向-v
提供printf
选项,将输出粘贴到变量中,而不是回显到stdout。
现在如果我想将原始的,未转义的字符串回显给stdout怎么办?如果我只做一个简单的echo
,它包含所有元/控制字符; echo -e
让我稍微进一步,但不是完全没有转变的状态。
答案 0 :(得分:0)
使用printf
和eval
来" unescape"字符串(它非常安全,因为它已经被bash引用)。通常,echo
对任意用户输入都是危险的。
eval printf '%s\\n' "$var"
printf的参数是%s\\n
,即使在单引号内也有双反斜杠,因为eval会将其作为一个参数然后将其剥离(评估它),因此它实际上变为类似:{{ 1}}这是一个非常安全有效的命令(变量甚至包括换行符和空格,如你所见)。