Ich versuche, einen JSON in BASH zu erstellen, wobei eines der Felder auf dem Ergebnis eines früheren Befehls basiert
BIN=$(cat next_entry)
OUTDIR="/tmp/cpupower/${BIN}"
echo $OUTDIR
JSON="'"'{"hostname": "localhost", "outdir": "${OUTDIR}", "port": 20400, "size": 100000}'"'"
echo $JSON
Das obige Skript gibt bei Ausführung Folgendes zurück:
/tmp/cpupower/0
, port: 20400, size: 100000}': /tmp/cpupower/0
Wie kann ich Variablen in diesen Zeichenfolgen mit mehreren Anführungszeichen richtig ersetzen?
bash
variable-substitution
json
Guru Prasad
quelle
quelle
OUTDIR
Variable im Wert vonJSON
und in den Anführungszeichen erweitert zu sein scheint"port"
und"size"
unerklärlicherweise nicht vorhanden ist.) (2) Es scheint mir offensichtlich, dass dieBIN
Variable einen Wagenrücklauf enthält (aus dernext_entry
Datei); und doch ging das Problem anscheinend weg, ohne dass dieses Problem angesprochen wurde.Antworten:
Das ist aus den einfachen Anführungszeichen für die Erweiterung von
$OUTDIR
. Wir haben diese Erweiterung aus gutem Grund in doppelte Anführungszeichen gesetzt, obwohl dies für eine skalare Variablenzuweisung nicht unbedingt erforderlich ist.Wenn Sie die vorbei sind
$JSON
Variableecho
, Zitate sind notwendig , wenn die Split + glob Operator zu deaktivieren. Es ist auch am besten,echo
für beliebige Daten zu vermeiden :quelle
\'
. Ich glaube nicht, dass ich das bei einigen Beispielen gesehen habe, die ich bei SO / unix.stackexchange gesehen habe."'"
zu\'
völlig stilistisch (dh willkürlich) war und dass die einzige wesentliche Änderung, die Sie vorgenommen haben, die Anführungszeichen waren$OUTDIR
. (Sie könnten auch erwähnt haben, dass die Zahnspangen${OUTDIR}
einfach nicht notwendig waren.) (2) Bitte lesen Sie meinen Kommentar zu der Frage und sagen Sie mir, ob ich halluziniere (dh habe ich etwas übersehen oder haben Sie?).Stéphanes Antwort ist großartig und positiv bewertet. Hier ist nur ein Tipp; anstatt zu tun
Du kannst tun:
Und sparen Sie so das Laichen eines zusätzlichen Prozesses. Lesen Sie hier mehr .
quelle
cat
,bash
noch einen zusätzlichen Prozess erzeugen. Siehe Grundlegendes Bash Read-a-Datei Befehl Substitution für weitere Details.Wenn Sie hier gelandet sind und versucht haben, AWS-Befehle zu verwenden, funktioniert die Antwort von @ Stéphane Chazelas fast. Hier sind die anfänglichen Anführungszeichen (\ ') nicht erforderlich, sie brechen tatsächlich den Befehl.
^ Das funktioniert gut
quelle