Bash vous permet de placer des chaînes de façon adjacente, et elles finiront par être collées ensemble.
Donc ça:
$ echo "Hello"', world!'
produit
Hello, world!
L'astuce consiste à alterner entre les chaînes simples et doubles entre guillemets selon les besoins. Malheureusement, cela devient rapidement très compliqué. Par exemple:
$ echo "I like to use" '"double quotes"' "sometimes"
produit
I like to use "double quotes" sometimes
Dans votre exemple, je le 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 en utilisant des guillemets Unicode. Ce qui suit ne fonctionnera pas dans bash - c'est juste pour l'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 «'» »ci-dessus seront interprétés par bash. Les guillemets comme " 'se retrouveront dans la variable résultante.
Si je donne le même traitement à l'exemple précédent, cela ressemble à ceci:
$ echo" I like to use" ' "double quotes"' " sometimes"