【发布时间】:2017-08-01 08:39:24
【问题描述】:
在 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'
您可以向printf 提供-v 选项以将输出粘贴到变量中,而不是回显到标准输出。
现在,如果我想将原始的未转义字符串回显到标准输出怎么办?如果我只是做一个简单的echo,它包括所有的元/控制字符; echo -e 让我更进一步,但不是完全未转义的状态。
【问题讨论】:
-
bash可以取消转义:bash -c "echo ${var}" -
整洁:谢谢@hek2mgl。如果您将此添加为答案,我会接受:)
-
嗯。这只是一个想法。我对此并不满意。重新介绍了使用
printf $q时避免的那些风险 -
是的,它很容易受到代码注入的影响......耻辱:P
-
...也许不是:
printf -v X "%q" '$(touch foo)'; Y="$(bash -c "echo $X")"; echo "$Y"将$Y设置为并回显$(touch foo),但不会执行touch foo。