【发布时间】:2018-07-08 03:45:43
【问题描述】:
我在互联网上的任何地方都找不到这个,所以我想把它添加为文档。
我想在非显示字符\30(“RecordSeparator”)周围加入一个 json 数组,这样我就可以在 bash 中安全地迭代它,但我不知道该怎么做。我尝试了echo '["one","two","three"]' | jq 'join("\30")' 和几个排列组合,但没有成功。
原来解决方案很简单....(见答案)
【问题讨论】:
-
对不起已经回答了这个问题的两个人,我最初的问题措辞不佳。为了清楚起见,我现在对其进行了编辑。具体来说,我只是在寻找在
join函数中使用非显示字符的语法。我的原始答案(使用jq 'join("'$'\30''")'和@Charles Duffy 的答案(使用\uxxxx这样的语法:jq 'join("\u001e")')都可以正常工作。请注意,@Charles Duffy 的答案对于迭代有一些额外的价值。 -
啊,明白了。基本上,规则是要相信您的代码将与
jq的未来版本一起使用(正如峰值所表明的那样,未来可能对未转义的文字不太宽容),您应该使用 JSON 转义语法。顺便说一句,要将 bash 转义转换为 JSON 转义,您可以执行以下操作:jq -n --arg str $'\030' '$str',输出"\u0018"。或者您可以使用相同的 (--arg) 语法来传递文字,并在您的jq中使用$str。 :)