![Bash CLI 从命令输出中删除引号](https://linux22.com/image/1203697/Bash%20CLI%20%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E4%B8%AD%E5%88%A0%E9%99%A4%E5%BC%95%E5%8F%B7.png)
jq
我正在尝试使用per加载 JSON 文件这里。这很简单,并且有效:
$ cat ~/Downloads/json.txt | jq '.name'
"web"
但是,我需要将此变量的输出分配给命令。我尝试这样做,并且成功了:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
但我想要/home/qut/Downloads/web.txt
。
我如何删除引号,即将其更改"web"
为web
?
答案1
您可以使用tr删除引号的命令:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
答案2
在特定情况下jq
,您可以指定输出应为生的格式:
--raw-output / -r:
With this option, if the filter´s result is a string then it will
be written directly to standard output rather than being formatted
as a JSON string with quotes. This can be useful for making jq fil‐
ters talk to non-JSON-based systems.
为了说明如何使用示例json.txt
文件你的链接:
$ jq '.name' json.txt
"Google"
然而
$ jq -r '.name' json.txt
Google
答案3
还有更简单、更高效的,使用原生 shell 前缀/后缀删除功能:
my_json=$(cat ~/Downloads/json.txt | jq '.name')
temp="${my_json%\"}"
temp="${temp#\"}"
echo "$temp"
来源https://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable
答案4
你可以eval echo
这样使用:
my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))
但这并不理想——很容易导致错误和/或安全漏洞。