bash - 使用 "printf %q"时如何抑制不需要的美元和引号符号?

标签 bash printf quoting

我需要转义公钥中的换行符,以便将其嵌入到 bash 脚本的 json 输出中。我想做的是:

Little-Net:~ minfrin$ [escape-it-somehow] server.pub"
-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqczXmXuynhalcmzP7ebV\nd7RYLLKJlGLT3OGL5VMnttvPRWoYGueseXnwlHKOcEYv0ZdSVi+e+yWK0lVgARQ9\nkNdumatV9h1S7IHC8fFexuz32Pu7piZlIcsRR+wSWXyA53KPT3NahlLqUGzQ66WX\nGqNmvcJjY0YcaPYjDsueTuQK3wogGOYrVetI33nVX/1ckBbtjgAjf8Bpieb2SQ1Z\nJYt+iBE4h7shUrRT9kT7+8BpGuZgUTVYFSxRw9r6TaFrLyaImRCELTqrxILSHWcz\nJtYBzyYFjYzENNn5L4fcrDFIId5oNil3ZaDtDFNdekdyOdirSHC3J7+aHbYKnC8a\nWwIDAQAB\n-----END PUBLIC KEY-----

我曾尝试使用 bash printf 函数,但出于我不明白的原因,输出被美元和引号字符包围着,如下所示:

Little-Net:~ minfrin$ printf %q "$(cat server.pub)"
$'-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqczXmXuynhalcmzP7ebV\nd7RYLLKJlGLT3OGL5VMnttvPRWoYGueseXnwlHKOcEYv0ZdSVi+e+yWK0lVgARQ9\nkNdumatV9h1S7IHC8fFexuz32Pu7piZlIcsRR+wSWXyA53KPT3NahlLqUGzQ66WX\nGqNmvcJjY0YcaPYjDsueTuQK3wogGOYrVetI33nVX/1ckBbtjgAjf8Bpieb2SQ1Z\nJYt+iBE4h7shUrRT9kT7+8BpGuZgUTVYFSxRw9r6TaFrLyaImRCELTqrxILSHWcz\nJtYBzyYFjYzENNn5L4fcrDFIId5oNil3ZaDtDFNdekdyOdirSHC3J7+aHbYKnC8a\nWwIDAQAB\n-----END PUBLIC KEY-----'

我的问题是,为什么 printf 添加了美元和引号字符?如何阻止 printf 添加美元和引号?我应该使用另一种技术来代替 printf 来转义换行符吗?

这是 MacOSX 10.10.5 提供的 bash。我从 bash 得到的结果与 CentOS6 提供的结果相同。

最佳答案

您可以使用 awk 进行转义:

awk -vRS="\n" -vORS="\\\n" '1' server.pub

关于bash - 使用 "printf %q"时如何抑制不需要的美元和引号符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294642/

相关文章:

bash - 如何将带空格的不带引号的字符串作为带引号的参数传递?

postgresql - 如何在 psql 的命令行查询中转义单引号?

r - 编程时如何将 dplyr::group_by 与多个组一起使用

bash - IntelliJ 中的 zsh

BASH:在特定位置插入文本

linux - 删除超过 3 年的文件

bash - 在 linux 目录中重命名最新创建的文件

c - 使用整数的小数精度

c - printf()函数的运行时间

c - sprintf 数组中指针的可变数量