wie 3 Anführungszeichen in Shellskript ? [gelöst]
wie 3 Anführungszeichen in Shellskript ? [gelöst]
Hi Gemeinde,
tue mich leider schwer eine 3. Ebene Anführungszeichen hier mitzugeben:
Habe eine json-Spalte in MySQL mit Wertepaaren welche auch interne Anführungszeichen hat und möchte aus einem Shellscript da reinschreiben. Bräuchte also eine weitere Ebene Anführungszeichen.
(Innen mit \" hat nicht funktioniert.)
mysql -e"update tabelle set foo='{"cb7": {"bla": '$shell_var', "blue": false}}' where bedingung='$var';"
Danke
tue mich leider schwer eine 3. Ebene Anführungszeichen hier mitzugeben:
Habe eine json-Spalte in MySQL mit Wertepaaren welche auch interne Anführungszeichen hat und möchte aus einem Shellscript da reinschreiben. Bräuchte also eine weitere Ebene Anführungszeichen.
(Innen mit \" hat nicht funktioniert.)
mysql -e"update tabelle set foo='{"cb7": {"bla": '$shell_var', "blue": false}}' where bedingung='$var';"
Danke
Zuletzt geändert von xcomm am 27.05.2023 18:22:07, insgesamt 1-mal geändert.
-
- Beiträge: 938
- Registriert: 22.02.2009 16:19:02
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Schweiz
-
Kontaktdaten:
Re: wie 3 Anführungszeichen in Shellskript ?
So aus der Hüfte geschossen: Kannst du den Befehl mit printf erstellen und dann in den mysql-Client hineinpipen?
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.
Re: wie 3 Anführungszeichen in Shellskript ?
Ich weiss nicht genau ob du sowas gemeint hast, aber vielleicht kannst du was fuer dein Skript anpassen?
Shell Skript:
Code: Alles auswählen
mysql> select * from TESTTABELLE;
+------+--------+------+
| id | day | time |
+------+--------+------+
| 1 | MONTAG | TEST |
+------+--------+------+
Code: Alles auswählen
#!/bin/bash
shell_var=STRING
var=MONTAG
mysql -u user database << EOF
update TESTTABELLE set time = '{"cb7i": {"bla": "$shell_var", "blue": false}}' where day = "$var";
EOF
Code: Alles auswählen
mysql> select * from TESTTABELLE;
+------+--------+--------------------------------------------+
| id | day | time |
+------+--------+--------------------------------------------+
| 1 | MONTAG | {"cb7i": {"bla": "STRING", "blue": false}} |
+------+--------+--------------------------------------------+
1 row in set (0,00 sec)
-
- Beiträge: 938
- Registriert: 22.02.2009 16:19:02
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Schweiz
-
Kontaktdaten:
Re: wie 3 Anführungszeichen in Shellskript ?
Hm, nur mit printf kriege ich es auch nicht hin.
Das wäre eine Lösung in Python:
Ausgabe:
Das wäre eine Lösung in Python:
Code: Alles auswählen
#!/usr/bin/env python3
shell_var = 'STRING'
var = 'MONTAG'
template = '''
update TESTTABELLE set time = '{"cb7i": {"bla": "%s", "blue": false}}' where day = "%s";
'''
print(template.strip() % (shell_var, var))
Code: Alles auswählen
update TESTTABELLE set time = '{"cb7i": {"bla": "STRING", "blue": false}}' where day = "MONTAG";
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.
Re: wie 3 Anführungszeichen in Shellskript ?
Danke Euch - großartig!!!
Nehme die Bash-Variante, weil für mich leichter / bin oldschool. Tut Super!
Nehme die Bash-Variante, weil für mich leichter / bin oldschool. Tut Super!
Code: Alles auswählen
mysql -u user -Ddatabase << EOF
update TESTTABELLE set time = '{"cb7i": {"bla": "$shell_var", "blue": false}}' where day = "$var";
EOF
Re: wie 3 Anführungszeichen in Shellskript ? [gelöst]
Um den urspruenglichen Ansatz nochmal zurueckzukommen ...
Ich verstehe nicht genau was genau du haben willst, denke mir aber, dass es darum geht, dass die Double-Quotes um die Json-Werte erhalten bleiben sollen.xcomm hat geschrieben:27.05.2023 13:45:15tue mich leider schwer eine 3. Ebene Anführungszeichen hier mitzugeben:
Habe eine json-Spalte in MySQL mit Wertepaaren welche auch interne Anführungszeichen hat und möchte aus einem Shellscript da reinschreiben. Bräuchte also eine weitere Ebene Anführungszeichen.
xcomm hat geschrieben:27.05.2023 13:45:15(Innen mit \" hat nicht funktioniert.)
[/quoŧe]
Diese Aussage kann ich nicht nachvollziehen, denn bei mir funktioniert das
wunderbar.
Vermutlich brauchst du diesen Befehl:(Es ist wichtig, dass die Variablen-Expansionen in einem Double-Quote-Kontext stehen, um den Whitespace zu erhalten. Man sieht das hier bei den doppelten Leerzeichen gut.)Code: Alles auswählen
:-/ shell_var="a b" :-/ var="c d" :-/ echo 'mysql -e"update tabelle set foo='\''{\"cb7\": {\"bla\": \"'"$shell_var"'\", \"blue\": false}}'\'' where bedingung='"'$var'"';"' mysql -e"update tabelle set foo='{\"cb7\": {\"bla\": \"a b\", \"blue\": false}}' where bedingung='c d';"
Zugegeben, das sind nun ganz schoen viele Quotes!
Intuitiv sind solche Quoting-Spielchen schwer zu verstehen, aber mit mechanischem Befolgen der Quoting-Regeln (IMO am besten mit Farbe auf Papier) laesst sich das ganz gut konstruieren und dekonstruieren.
paedubuchers Vorschlag macht es natuerlich einfacher: Statt alles in eine Zeile zu fummeln, zerteilt man das Problem in Teilprobleme (Divide and Conquer) und nutzt einen weiteren Quoting-Mechanismus (Heredoc), um mehr Uebersicht zu bekommen.
Use ed once in a while!