Bash CLI entfernt Anführungszeichen aus der Ausgabe eines Befehls

Bash CLI entfernt Anführungszeichen aus der Ausgabe eines Befehls

Ich versuche, eine JSON-Datei mit jqper zu ladenHier. Es ist ganz einfach und funktioniert so:

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

Ich muss jedoch die Ausgabe dieser Variable einem Befehl zuweisen. Ich habe versucht, dies zu tun, und das funktioniert:

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

Aber ich möchte /home/qut/Downloads/web.txt.

Wie entferne ich die Anführungszeichen, d. h. ändere sie "web"in web?

Antwort1

Du kannst den ... benutzentrBefehl zum Entfernen der Anführungszeichen:

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

Antwort2

Im speziellen Fall von jqkönnen Sie angeben, dass die Ausgabe in erfolgen sollrohFormat:

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

Zur Veranschaulichung verwenden Sie die Beispieldatei json.txtvonDein Link:

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

wohingegen

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

Antwort3

Es geht einfacher und effizienter, indem Sie die native Funktion zum Entfernen von Präfixen und Suffixen der Shell verwenden:

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

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

Antwort4

Sie könnten eval echoes wie folgt verwenden:

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

Dies ist jedoch nicht ideal und könnte leicht zu Fehlern und/oder Sicherheitsmängeln führen.

verwandte Informationen