Bash vous permet de placer des cordes de manière adjacente, et elles finiront juste par être collées les unes aux autres.
Alors ça :
$ echo "Hello"', world!'
produit
Hello, world!
L'astuce consiste à alterner entre les chaînes de caractères à guillemets simples et doubles selon les besoins. Malheureusement, cela devient vite très désordonné. Par exemple :
$ echo "I like to use" '"double quotes"' "sometimes"
produit
I like to use "double quotes" sometimes
Dans votre exemple, je ferais quelque chose comme ça :
$ dbtable=example
$ dbload='load data local infile "'"'gfpoint.csv'"'" into '"table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '"'"'"' LINES "'TERMINATED BY "'"'\n'"'" IGNORE 1 LINES'
$ echo $dbload
qui produit le résultat suivant :
load data local infile "'gfpoint.csv'" into table example FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "'\n'" IGNORE 1 LINES
Il est difficile de voir ce qui se passe ici, mais je peux l'annoter en utilisant des guillemets Unicode. Ce qui suit ne fonctionnera pas dans bash - c'est juste une illustration :
dbload=
' load data local infile "
'" 'gfpoint.csv'
"' " into
'" table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '
"' "
'" ' LINES
"' TERMINATED BY "
'" '\n'
"' " IGNORE 1 LINES
'
Les guillemets comme " ' ' " dans le texte ci-dessus seront interprétés par bash. Les guillemets comme " '
se retrouvera dans la variable résultante.
Si j'applique le même traitement à l'exemple précédent, on obtient le résultat suivant :
$ echo
" I like to use
" ' "double quotes"
' " sometimes
"
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 .