Bash CLI remove as citações da saída de um comando

2

Estou tentando carregar um arquivo JSON usando jq per aqui . É bastante simples e isso funciona:

$ cat ~/Downloads/json.txt | jq '.name'
"web"

No entanto, preciso atribuir a saída dessa variável a um comando. Eu tentei fazer isso e isso funciona:

$ my_json='cat ~/Downloads/json.txt | jq '.name''
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt

Mas quero /home/qut/Downloads/web.txt .

Como faço para remover as aspas, por exemplo, altere "web" para web ?

    
por W R 24.11.2017 / 23:24

3 respostas

7

Você pode usar o comando tr para remover as aspas:

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
    
por Florian Diesch 24.11.2017 / 23:57
3

No caso particular de jq , você pode especificar que a saída deve estar no formato raw :

   --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.

Para ilustrar o uso do arquivo json.txt de amostra de seu link :

$ jq '.name' json.txt
"Google"

enquanto

$ jq -r '.name' json.txt
Google
    
por steeldriver 25.11.2017 / 01:29
1

Você pode usar eval echo da seguinte forma:

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

mas isso não é ideal - pode facilmente causar erros e / ou falhas de segurança.

    
por wjandrea 25.11.2017 / 00:01