Comment échapper aux guillemets doubles à l'intérieur d'une chaîne double en Bash ?
Par exemple, dans mon shell script
#!/bin/bash
dbload="load data local infile \"'gfpoint.csv'\" into table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"'\n'\" IGNORE 1 LINES"
Je ne peux pas obtenir le ENCLOSED BY '\"'
avec des guillemets doubles pour s'échapper correctement. Je ne peux pas utiliser de guillemets simples pour ma variable, car je veux utiliser la variable $dbtable
.
1 votes
Voir aussi mywiki.wooledge.org/BashFAQ/050
0 votes
Duplicata possible de Échapper aux guillemets simples dans les chaînes de caractères à guillemets simples
5 votes
@kenorb Ça ne ressemble pas à une duplication de cette question...
0 votes
Voir aussi stackoverflow.com/questions/10067266/
0 votes
@Daenyth Ce n'est pas le type de commande auquel on s'attend à ce que les utilisateurs finaux aient accès. Les scripts de chargement en masse sont généralement exécutés sur le serveur par des utilisateurs de confiance (tels que les administrateurs système ou les développeurs). Oui, si les utilisateurs finaux contrôlent la valeur de
$dbtable
il y a un risque. Ce serait très Il est toutefois peu courant que les utilisateurs finaux se connectent par SSH à une machine pour charger leurs données.0 votes
@jpmc26 Une entrée malveillante n'est pas le seul cas - le chargement à partir d'un csv pourrait facilement inclure des données qui sont invalides sql juste par accident.
0 votes
@Daenyth Le CSV n'est jamais analysé en tant que SQL..... Il est analysé par une méthode explicite Commande de parsing CSV qui insère les valeurs dans un tableau.
0 votes
Voir aussi : Différence entre les guillemets simples et doubles dans Bash .