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”