Bash CLI remove aspas da saída de um comando

Bash CLI remove aspas da saída de um comando

Estou tentando carregar um arquivo JSON usando jqperaqui. É bastante simples e funciona:

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

Porém, preciso atribuir a saída desta 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 eu quero /home/qut/Downloads/web.txt.

Como faço para remover as aspas, ou seja, mudar "web"para web?

Responder1

Você pode usar otrcomando para remover as aspas:

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

Responder2

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

   --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 json.txtarquivo de amostra deseu link:

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

enquanto

$ jq -r '.name' json.txt
Google

Responder3

É mais simples e eficiente, usando o recurso de remoção de prefixo/sufixo do shell nativo:

my_json=$(cat ~/Downloads/json.txt | jq '.name')
    temp="${my_json%\"}"
    temp="${temp#\"}"
    echo "$temp"

Fontehttps://stackoverflow.com/questions/9733338/shell-script-remove-first-and-last-quote-from-a-variable

Responder4

Você poderia usar eval echoassim:

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

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

informação relacionada