如何在shell中将包含JSON的多行变量转换为单行?

Ami*_*mir 2 bash shell jq

我在 shell 中有以下变量

{
  "type": "service_account",
  "project_id": "projectid234",
  "private_key_id": "aasdadsxzce5",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5+xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5+mXuN45vwqh6QvG4lw/Hi7EJhtAn+FQy7+yOQYrw3l\nQ2CpxDotT+PT2OuQ6LVbc/F+SblPlrK3B+8aEMo57PZ+gnwMcQ7+ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n",
  "client_email": "clinetmail@asdasd3435.iam.gserviceaccount.com",
  "client_id": "1234242342341",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)

就像下面这样:

export var1='{
      "type": "service_account",
      "project_id": "projectid234",
      "private_key_id": "aasdadsxzce5",
      "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCiWjA5+xF6gsGC\nOknIL9DOCQpV2LRXYPEKl5+mXuN45vwqh6QvG4lw/Hi7EJhtAn+FQy7+yOQYrw3l\nQ2CpxDotT+PT2OuQ6LVbc/F+SblPlrK3B+8aEMo57PZ+gnwMcQ7+ofPnzC635uUP\npOG0idMTK\n-----END PRIVATE KEY-----\n",
      "client_email": "clinetmail@asdasd3435.iam.gserviceaccount.com",
      "client_id": "1234242342341",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://oauth2.googleapis.com/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/assadjashd.iam.gserviceaccount.com"
    }'
Run Code Online (Sandbox Code Playgroud)

现在我想将其转换为单行,我该怎么办?我尝试了各种解决方案,但它们不起作用。例如,我使用了下面的代码,但在转换为 Base64 并解码后,它只返回第一行。你介意帮我吗?

$((echo $var1 | tr -d '\n') | base64)
Run Code Online (Sandbox Code Playgroud)

0st*_*ne0 5

这样的工具,它为我们提供了选项--compact-output,并且能够使用以下方式编码为 Base64@base64


至单行输出

jq --compact-output '' <<< "$test"
Run Code Online (Sandbox Code Playgroud)

转Base64单行输出

jq --compact-output  '@base64' <<< "$test"
Run Code Online (Sandbox Code Playgroud)

转为Base64单行输出,并用bash解码

jq --compact-output --raw-output '@base64' <<< "$test" | base64 --decode
Run Code Online (Sandbox Code Playgroud)

注意--raw-output删除""


上述行的本地 shell 示例:

jq --compact-output '' <<< "$test"
Run Code Online (Sandbox Code Playgroud)