在这一段时间

时间:2017-06-08 02:21:18

标签: bash character jq

所以我有一个从xml转换而来的json文件。我试图在bash脚本中使用jq来解决这个问题。

命令行jq -r '.users.user[0].id."#text"' cosmology18.json的当前效果非常好并且显示输出完美

然而,在bash中,我不得不使用替换来尝试让它无法解决。

首先我参与了第一部分阅读用户数据

  baselineresult=$(jq -r '.users.user[1].cpid."#text"' $1)

允许我回应完整的数据

然而,当我尝试添加$basecount时,每次我无法使其工作,所以我构建了这种疯狂的方法,我不得不使用替换来将$ basecount放入[]用户。

  bracea="["
  braceb="]"
  dquote='"'
  squote="'"
  pound="#"
  echo test of command is jq -r "${squote}.users.user${bracea}${basecount}${braceb}.cpid.${dquote}#text${dquote}${squote} $1"

  baselineresult=$(jq -r "${squote}.users.user${bracea}${basecount}${braceb}.cpid.${dquote}${pound}text${dquote}${squote} $1")
  echo $baselineresult

该命令与我在命令行输入的命令相匹配。

然而我明白了:

命令测试是jq -r' .users.user [0] .cpid。" #text"' cosmology18.json jq:错误:语法错误,意外的INVALID_CHARACTER,期待$ end(Unix shell引用问题?)在第1行: ' .users.user [0] .cpid"#文本"' cosmology18.json jq:1编译错误

任何想法..现在已经8个小时了。 我似乎无法找到这个非法字符,因为输出与jq -r' .users.user [0] .id。" #text" #text"#text 34;' cosmology18.json

1 个答案:

答案 0 :(得分:0)

问题在于,您不知道bash语法和jq语法是什么,因此您要将它们合并在一起。< / p>

以下是jq期望的一个例子:

.users.user[1].cpid."#text"

以下是您提供的内容:

'.users.user[1].cpid."#text"' filename

jq永远不会看到单引号,在您的工作命令中,他们使用bash语法来指定要传递给jq的字符串。相反,你试图给jq单引号,它不知道这意味着什么。

类似地,文件名后面的空格是bash语法,用于指定要传递第二个参数。相反,你试图在它的第一个参数中将它们提供给jq,这是它不期望的。

jq,此命令与原始命令无法区分(导致execve调用具有完全相同的参数)。您可以改变变量以获得不同的索引:

var=1
baselineresult=$(jq -r '.users.user['"$var"'].cpid."#text"' "$1")