Bash 我在eval with}中遇到一个解析错误
下面是我的简单Bash脚本:Bash 我在eval with}中遇到一个解析错误,bash,Bash,下面是我的简单Bash脚本: curljson() { eval "curl $* | python -m json.tool" } 它只是以可读的方式输出JSON 但当我这样做的时候: curljson -X PUT -d '{"settings": {"number_of_shards": 3, "number_of_replicas": 1}}' http://192.168.1.111:9200/blogs 我得到这个错误: (eval):1: parse error
curljson() {
eval "curl $* | python -m json.tool"
}
它只是以可读的方式输出JSON
但当我这样做的时候:
curljson -X PUT -d '{"settings": {"number_of_shards": 3, "number_of_replicas": 1}}' http://192.168.1.111:9200/blogs
我得到这个错误:
(eval):1: parse error near `}'
但当我卷曲的时候,它就起作用了,所以它似乎是我的剧本
那么,我如何让这个Bash脚本接受
}
?您根本不需要评估
curljson() {
curl "$@" | python -m json.tool
}
curljson
真正做的就是将其所有参数原样传递给curl
,然后将输出通过管道传递给Python脚本“$@”
扩展到函数作为参数接收的相同字串。此处不要使用eval
。你不需要它,这是一个巨大的安全问题。在这里使用$*
也是“错误的”。您应该使用curl“$@”| python-m json.tool
(并确保像在示例中那样单独传递参数)。如果将set-x
添加到函数顶部,并将set+x
添加到底部,您可能会更好地看到解析错误的来源。(您对$*
和eval
的使用共同导致了问题。尽管在这里使用“$@”
也会出现eval
的问题。您对行的评估过高。)