小编Yay*_*uan的帖子

linux 64位jq不支持select函数中带空格扩展的变量

macOS 中的示例正常:

jq版

jq-1.6
Run Code Online (Sandbox Code Playgroud)

代码

a='[{"a":"b"},{"c":"d c"}]'
b="d c"
echo $a|jq '.[]|select(.c == "'$b'")'
Run Code Online (Sandbox Code Playgroud)

输出

{
  "c": "d c"
}
Run Code Online (Sandbox Code Playgroud)

Linux 中的 KO 示例:

jq版

jq-1.5-1-a5b5cbe
Run Code Online (Sandbox Code Playgroud)

代码

a='[{"a":"b"},{"c":"d c"}]'
b="d c"
echo $a|jq '.[]|select(.c == "'$b'")'
Run Code Online (Sandbox Code Playgroud)

输出

jq: error: syntax error, unexpected $end, expecting QQSTRING_TEXT or QQSTRING_INTERP_START or QQSTRING_END (Unix shell quoting issues?) at <top-level>, line 1:
.[]|select(.c == "d
jq: 1 compile error
Run Code Online (Sandbox Code Playgroud)

如上,linux环境和macos环境下jq的select函数中的空格扩展是有区别的。我已经尝试在linux环境中下载jq-1.6,但它也产生了像上面的linux示例KO一样的问题。linux版本的jq还存在bug吗?有人能以另一种很好的方式来实现上述功能吗?我在 shell 中使用 jq 来解析数据库信息并获取指定内容...提前致谢!

linux bash x86-64 jq

1
推荐指数
1
解决办法
71
查看次数

命令“rm -rf !(a)”在 bash -c 语法中不起作用

family 目录中有三个文件,名为“a”“b”“c”。我使用“rm -rf !(a)”删除了“b”和“c”文件,在 bash CLI 中运行后,它工作正常。如下:

xx@xx:~/# ls
a b c
xx@xx:~/# rm -rf !(a)
xx@xx:~/# ls
a
Run Code Online (Sandbox Code Playgroud)

然而,当我通过“bash -c”运行它时,它向我抛出了一个语法错误,如下所示:[![在此处输入图像描述]

xx@xx:~/# ls
a b c
xx@xx:~/# bash -c "rm -rf !(a)"
bash: -c: line 0: syntax error near unexpected token`('
bash: -c: line 0:`rm -rf !(a)'
Run Code Online (Sandbox Code Playgroud)

然后我在“!”、“(”和“)”之前添加了反斜杠。虽然,并没有出现错误;我发现它不起作用。如下:

xx@xx:~/# ls
a b c
xx@xx:~/# bash -c "rm -rf \!\(a\)"
xx@xx:~/# ls
a b c
Run Code Online (Sandbox Code Playgroud)

任何机构都可以帮助澄清这个问题吗?

linux bash

1
推荐指数
1
解决办法
93
查看次数

标签 统计

bash ×2

linux ×2

jq ×1

x86-64 ×1