Bash pozwala na umieszczenie w sąsiedztwie ciągów, a oni po prostu skończyć sklejone ze sobą.
Więc tak:
$ echo "Hello"', world!'
produkuje
Hello, world!
Sztuką jest, aby przełączać pomiędzy pojedynczych i podwójnych cudzysłowów w miarę potrzeb. Niestety, szybko staje się bardzo brudny.Na przykład:
$ echo "I like to use" '"double quotes"' "sometimes"
produkuje
I like to use "double quotes" sometimes
W przykładzie, zrobiłbym to coś takiego:
$ 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
która produkuje następujące dane wyjściowe:
load data local infile "'gfpoint.csv'" into table example FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY "'\n'" IGNORE 1 LINES
Trudno, aby zobaczyć, co się tutaj dzieje, ale mogę opisywanie go za pomocą cytatów Unicode. Poniższa nie będzie działać w bash - to tylko dla ilustracji:
dbload=
'load data local infile "
'«'gfpoint.csv'
»' " into
'«table $dbtable FIELDS TERMINATED BY ',' ENCLOSED BY '
»' "
'«' LINES
»' TERMINATED BY "
'«'\n'
»' " IGNORE 1 LINES
'
Cytaty takie jak "" "w powyższym będą interpretowane przez bash. Cytaty takie jak " '
znajdą się w wynikowej zmiennej.
Jeśli dam takie samo traktowanie wcześniejszym przykładzie wygląda to tak:
$ echo
„I like to use
”
„"double quotes"
”
„sometimes
”
Należy zapoznać się z koncepcją [SQL injection] (http: // en. wikipedia.org/wiki/SQL_injection) zanim zaczniesz pisać kod taki jak ten. – Daenyth
Zobacz także http://mywiki.wooledge.org/BashFAQ/050 –
możliwy duplikat [Escaping pojedynczych cudzysłowów w ciągu cudzysłowów] (http://stackoverflow.com/questions/1250079/escaping-single-quotes- w ciągu pojedynczych znaków) – kenorb