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
"