So formatieren Sie Anführungszeichen in einer PostgreSQL-Abfrage aus einem Bash-Skript
Ich versuche, einen kubernetes Postgres-Pod mithilfe eines Bash-Skripts abzufragen, bei dem der Benutzer eine Variable eingeben und diese Variable dann zum Abfragen verwenden soll. Mein Bash-Skript lautet wie folgt:
#!/bin/bash
echo "give a last name"
read t
kubectl exec -it postgres-pod -- bash -c "psql -U postgres -c 'Select * from users WHERE last_name=\"$t\"'"
Ich habe alle Kombinationen von einfachen und doppelten Anführungszeichen ausprobiert, kann jedoch keinen Benutzernamen vom Typ Zeichenfolge übergeben. Anregungen wäre dankbar
Antworten
Die einfache, aber schlechte Lösung ist
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t'\""
Dies macht das Zitat richtig, ist aber anfällig für SQL-Injection. Was ist, wenn die Variable teinen Wert mit einem einfachen Anführungszeichen enthält?
Damit umzugehen ist nicht so einfach; Ich kann mir nur vorstellen, psqlVariablen wie diese zu verwenden:
echo "Select * from users WHERE last_name = :'var'" | bash -c "psql -U postgres -v var=\"$t\""
Nicht sicher, warum Sie Bash brauchen, sollte dies funktionieren?
kubectl exec -it postgres-pod -- psql -U postgres -c "SELECT * FROM users WHERE last_name='$t';"
Ich habe es mit der obigen Antwort von @James Brown gelöst:
bash -c "psql -U postgres -c \"Select * from users WHERE last_name='$t';\""