Bash CLI는 명령 출력에서 ​​따옴표를 제거합니다


12

jqper here을 사용하여 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?

답변:


27

tr 명령을 사용 하여 따옴표를 제거 할 수 있습니다 .

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")

2
tr명령 주셔서 감사합니다 ... 나는 40 개 이상의 캐릭터 메가 1 라이너를 쓰는 사람들과 함께 수백 개의 공감대가있는 4 개의 다른 게시물을 살펴 보았습니다. 올바른 (그리고 아마도 현대적인) 솔루션이 있습니다.
Shadoninja

15

의 경우 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

1

다음 eval echo과 같이 사용할 수 있습니다 .

my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))

그러나 이것은 이상적이지 않습니다-쉽게 버그 및 / 또는 보안 결함을 일으킬 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.