【问题标题】:How do I break a long string in jq in a bash command? [duplicate]如何在 bash 命令中打破 jq 中的长字符串? [复制]
【发布时间】:2020-12-16 17:29:20
【问题描述】:

这是最小的例子:

echo "{\"foo\": \"John\",\"bar\":\"Smith\"}" | jq -r '@sh "export FOO=\(.foo)\nexport BAR=\(.bar) \n"'

在我的现实生活场景中,jq 选择器真的很长(想想 10 个导出),我怎样才能将它们分成多行或其他什么?我尝试在行尾使用\ 作为分隔符,但不幸的是它不起作用。

【问题讨论】:

标签: bash shell jq


【解决方案1】:

这可能会:

. <(
  jq -r '"export "+(to_entries|map((.key|ascii_upcase)+"="+(.value|@sh))|.[])'\
    <<<'{"foo":"John","bar":"Smith"}'
)

一个导出所有变量的替代方案:

. <(
  jq -r '
    "export"+(
      to_entries|
        map(
            " " +
            (.key|ascii_upcase) +
            "=" +
            (.value|@sh)
          ) | add
        )
  ' <<<'{"foo":"John","bar":"Smith"}'
)

您还可以考虑过滤掉 .key 字符串中的替换字符,以便它们始终是有效的 shell 变量标识符。

【讨论】:

    猜你喜欢
    • 2014-11-14
    • 2019-03-19
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多