Bash ti consente di posizionare le stringhe in modo adiacente e finiranno per essere incollate insieme.
Così questo:
$ echo "Hello"', world!'
produce
Hello, world!
Il trucco è alternare stringhe singole e doppie tra virgolette come richiesto. Sfortunatamente, diventa rapidamente molto disordinato. Per esempio:
$ echo "I like to use" '"double quotes"' "sometimes"
produce
I like to use "double quotes" sometimes
Nel tuo esempio, lo farei in questo modo:
$ 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
che produce il seguente output:
load data local infile "'gfpoint.csv'" into table example FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "'\n'" IGNORE 1 LINES
È difficile vedere cosa sta succedendo qui, ma posso annotarlo usando le virgolette Unicode. Quanto segue non funzionerà in bash - è solo a scopo illustrativo:
dbload=
' load data local infile "
' “ 'gfpoint.csv'
” ' " into
' “ table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '
” ' "
' “ ' LINES
” ' TERMINATED BY "
' “ '\n'
” ' " IGNORE 1 LINES
'
Le virgolette come "" "di cui sopra saranno interpretate da bash. Le virgolette come " '
finiranno nella variabile risultante.
Se do lo stesso trattamento all'esempio precedente, si presenta così:
$ echo
“ I like to use
”
' "double quotes"
'
“ sometimes
”