Bash vous permet de placer des chaînes de manière adjacente, et ils vont finir par être collées ensemble.
donc ceci:
$ echo "Hello"', world!'
produit
Hello, world!
L'astuce consiste à alterner entre les cordes simples et doubles guillemets, au besoin. Malheureusement, il devient rapidement très salissant.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 ceci:
$ 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 la sortie suivante:
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 à l'aide des citations Unicode. Ce qui suit ne marchera pas dans bash - il est juste pour illustration:
dbload=
'load data local infile "
' « 'gfpoint.csv'
»' " into
' « table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '
»' "
' « ' LINES
»' TERMINATED BY "
' « '\n'
»' " IGNORE 1 LINES
'
Les citations comme "'" dans ce qui précède seront interprétées par bash. Les citations comme " '
finiront dans la variable résultante.
Si je donne le même traitement à l'exemple précédent, il ressemble à ceci:
$ echo
« I like to use
»
« "double quotes"
»
« sometimes
»
Vous devez vous familiariser avec le concept de [injection sql] (http: // fr. wikipedia.org/wiki/SQL_injection) avant de commencer à écrire du code comme celui-ci. – Daenyth
Voir également http://mywiki.wooledge.org/BashFAQ/050 –
duplication possible de [Échapper des guillemets simples dans les guillemets simples] (http://stackoverflow.com/questions/1250079/escaping-single-quotes- within-single-quoted-strings) – kenorb