使用 JQ 构建 JSON - 转义星号字符
Build JSON using JQ - escaping the asterix character
问题:
如何使用类似下面的方法在 bash 中使用 JQ 构建 JSON? (输出不符合预期 - 下面有解释)
Test1="*/15 * * * *"
json=$( jq -n --arg bob "$Test1" '{ Kate: $bob}' )
问题:
Bash 试图在回显字符串内容时提供帮助。在这种情况下,*
字符被解释为当前目录的内容。
问题举例:
如果我在当前目录中有一个名为 test
的子文件夹,并且我执行以下操作:
:$ Test1="*/15 * * * *"
:$ echo $Test1
:$ */15 test test test test
显然,我不想用文件夹名称代替星号。我可以通过将变量放在引号中来解决这个问题 - 这会输出正确的字符串。
:$ Test1="*/15 * * * *"
:$ echo "$Test1"
:$ */15 * * * *
但是,当我尝试 时,我得到以下信息:
:$ Test1="*/15 * * * *"
:$ json=$( jq -n --arg bob "$Test1" '{ Kate: $bob}' )
:$ echo $json
:$ { "Kate": "*/15 test test test *" }
我希望输出为
{ "Kate": "*/15 * * * *" }
如何使用 JQ 实现此目的?
另外 - 为什么最后一颗星没有在 JSON 对象中解释?我本以为会看到文件夹名称的四个实例,但我看到了三个,后面跟着一个星号。
要停止 bash shell 中的通配符扩展,您可以:
set -o noglob
然后将其添加回:
set +o noglob
问题不在于您对 jq 的调用,而在于您检查 jq 输出的方式。遇到这类难题时,您通常可以通过检查中间结果来找出问题所在。所以考虑:
$ Test1="*/15 * * * *"
$ echo "$Test1"
*/15 * * * *
$ jq -n --arg bob "$Test1" '{ Kate: $bob}'
{
"Kate": "*/15 * * * *"
}
$ json=$(jq -n --arg bob "$Test1" '{ Kate: $bob}')
$ echo "$json"
{
"Kate": "*/15 * * * *"
}
尾随星号
同样,关于尾随星号的第二个问题:
$ echo "$Test1"
*/15 * * * *
$ echo $Test1
*/15 test test test test
$ echo \"$Test1\"
"*/15 test test test *"
问题:
如何使用类似下面的方法在 bash 中使用 JQ 构建 JSON? (输出不符合预期 - 下面有解释)
Test1="*/15 * * * *"
json=$( jq -n --arg bob "$Test1" '{ Kate: $bob}' )
问题:
Bash 试图在回显字符串内容时提供帮助。在这种情况下,*
字符被解释为当前目录的内容。
问题举例:
如果我在当前目录中有一个名为 test
的子文件夹,并且我执行以下操作:
:$ Test1="*/15 * * * *"
:$ echo $Test1
:$ */15 test test test test
显然,我不想用文件夹名称代替星号。我可以通过将变量放在引号中来解决这个问题 - 这会输出正确的字符串。
:$ Test1="*/15 * * * *"
:$ echo "$Test1"
:$ */15 * * * *
但是,当我尝试
:$ Test1="*/15 * * * *"
:$ json=$( jq -n --arg bob "$Test1" '{ Kate: $bob}' )
:$ echo $json
:$ { "Kate": "*/15 test test test *" }
我希望输出为
{ "Kate": "*/15 * * * *" }
如何使用 JQ 实现此目的?
另外 - 为什么最后一颗星没有在 JSON 对象中解释?我本以为会看到文件夹名称的四个实例,但我看到了三个,后面跟着一个星号。
要停止 bash shell 中的通配符扩展,您可以:
set -o noglob
然后将其添加回:
set +o noglob
问题不在于您对 jq 的调用,而在于您检查 jq 输出的方式。遇到这类难题时,您通常可以通过检查中间结果来找出问题所在。所以考虑:
$ Test1="*/15 * * * *"
$ echo "$Test1"
*/15 * * * *
$ jq -n --arg bob "$Test1" '{ Kate: $bob}'
{
"Kate": "*/15 * * * *"
}
$ json=$(jq -n --arg bob "$Test1" '{ Kate: $bob}')
$ echo "$json"
{
"Kate": "*/15 * * * *"
}
尾随星号
同样,关于尾随星号的第二个问题:
$ echo "$Test1"
*/15 * * * *
$ echo $Test1
*/15 test test test test
$ echo \"$Test1\"
"*/15 test test test *"