Perhatikan bahwa readakan memiliki kode keluar 1 dalam situasi ini; jika itu penting (Anda menjalankan set -e, misalnya), Anda akan ingin menambahkan a || truedi akhir baris pertama.
chepner
4
set -ekeluar dari shell jika perintah memiliki status keluar bukan-nol yang "tidak diantisipasi". Dengan "tak terduga", maksud saya ini berjalan dalam konteks di mana Anda tidak secara khusus melihat status keluarnya. falsedengan sendirinya, misalnya, akan keluar dari shell. false || truetidak akan, karena Anda mengantisipasi status keluar bukan-nol dengan menentukan perintah lain untuk dijalankan jika yang pertama gagal.
bukan solusi yang baik jika kueri sql berisi tanda kutip ganda. Anda harus melarikan diri dari mereka dan itu akan menjadi berantakan.
dogbane
13
Kutipan ganda @dogbane jarang muncul di sebagian besar dialek SQL, jadi dalam praktiknya ini bersih.
Iain Samuel McLean Elder
4
Kemudian bungkus string dalam tanda kutip tunggal.
tripleee
Tidak yakin mengapa Anda menginginkan atau membutuhkan jeda baris terdepan. Untuk aplikasi saya, saya tidak melakukannya, jadi saya baru mulai dengansql="SELECT c2, c2
bhfailor
1
Lucu karena tampaknya terlalu mudah untuk menjadi kenyataan. FYI, untuk menambahkan DQ, buat saja variabel DQ = '\ "' dan kemudian referensikan dalam pernyataan dengan $ {DQ}.
Timothy C. Quinn
69
Saya ingin memberikan satu jawaban tambahan, sementara yang lain sudah cukup dalam banyak kasus.
Saya ingin menulis string di beberapa baris, tetapi isinya harus satu baris.
sql=" \
SELECT c1, c2 \
from Table1, ${TABLE2} \
where ... \
"
Saya minta maaf jika ini sedikit di luar topik (saya tidak membutuhkan ini untuk SQL). Namun, posting ini muncul di antara hasil pertama saat mencari variabel shell multi-baris dan jawaban tambahan sepertinya sesuai.
Bahkan tanpa \ 's konten saya keluar di satu baris.
papiro
12
@papiro, coba echo "$sql"alih-alih echo $sql.
Michael Mol
@MichaelMol - Sekitar dua dekade setelah instalasi Linux pertama saya dan saya masih belajar sesuatu yang baru. Terima kasih untuk "trik" ini.
Seth
6
Berkat jawaban dimo414 untuk pertanyaan serupa , ini menunjukkan bagaimana solusi hebatnya bekerja, dan menunjukkan bahwa Anda juga dapat memiliki kutipan dan variabel dalam teks dengan mudah:
contoh keluaran
$ ./test.sh
The text from the example function is:Welcome dev:Would you "like" to know how many 'files' there are in/tmp?There are " 38" files in/tmp, according to the "wc" command
test.sh
#!/bin/bashfunction text1(){
COUNT=$(\ls /tmp | wc -l)
cat <<EOF
$1 Would you "like" to know how many 'files' there are in/tmp?There are "$COUNT" files in/tmp, according to the "wc" command
EOF
}function main(){
OUT=$(text1 "Welcome dev:")
echo "The text from the example function is: $OUT"}
main
readtidak mengekspor variabel (yang sering kali merupakan hal yang baik). Berikut adalah alternatif yang dapat diekspor dalam satu perintah, dapat mempertahankan atau membuang umpan baris, dan memungkinkan pencampuran gaya kutipan sesuai kebutuhan. Bekerja untuk bash dan zsh.
oneLine=$(printf %s \
a \
" b " \
$'\tc\t' \
'd ' \
)
multiLine=$(printf '%s\n' \
a \
" b " \
$'\tc\t' \
'd ' \
)
Saya akui kebutuhan untuk mengutip membuat ini jelek untuk SQL, tetapi itu menjawab pertanyaan (yang lebih umum diungkapkan) dalam judul.
shell
yang dibicarakan baik-baik di sini? Harusbatch
menjadibash
atau Anda benar-benar dari darkside tersebut?=
menggunakan spasi.Jawaban:
Gunakan
read
dengan heredoc seperti yang ditunjukkan di bawah ini:sumber
read
akan memiliki kode keluar 1 dalam situasi ini; jika itu penting (Anda menjalankanset -e
, misalnya), Anda akan ingin menambahkan a|| true
di akhir baris pertama.set -e
keluar dari shell jika perintah memiliki status keluar bukan-nol yang "tidak diantisipasi". Dengan "tak terduga", maksud saya ini berjalan dalam konteks di mana Anda tidak secara khusus melihat status keluarnya.false
dengan sendirinya, misalnya, akan keluar dari shell.false || true
tidak akan, karena Anda mengantisipasi status keluar bukan-nol dengan menentukan perintah lain untuk dijalankan jika yang pertama gagal.-d ' '
dilakukan disini?read
tahu untuk tidak berhenti membaca saat menemukan baris baru.cukup masukkan baris baru jika perlu
shell akan mencari tanda kutip penutup
sumber
sql="SELECT c2, c2
Saya ingin memberikan satu jawaban tambahan, sementara yang lain sudah cukup dalam banyak kasus.
Saya ingin menulis string di beberapa baris, tetapi isinya harus satu baris.
Saya minta maaf jika ini sedikit di luar topik (saya tidak membutuhkan ini untuk SQL). Namun, posting ini muncul di antara hasil pertama saat mencari variabel shell multi-baris dan jawaban tambahan sepertinya sesuai.
sumber
echo "$sql"
alih-alihecho $sql
.Berkat jawaban dimo414 untuk pertanyaan serupa , ini menunjukkan bagaimana solusi hebatnya bekerja, dan menunjukkan bahwa Anda juga dapat memiliki kutipan dan variabel dalam teks dengan mudah:
contoh keluaran
test.sh
sumber
read
tidak mengekspor variabel (yang sering kali merupakan hal yang baik). Berikut adalah alternatif yang dapat diekspor dalam satu perintah, dapat mempertahankan atau membuang umpan baris, dan memungkinkan pencampuran gaya kutipan sesuai kebutuhan. Bekerja untuk bash dan zsh.Saya akui kebutuhan untuk mengutip membuat ini jelek untuk SQL, tetapi itu menjawab pertanyaan (yang lebih umum diungkapkan) dalam judul.
Saya menggunakannya seperti ini
dalam file yang bersumber dari my
.bashrc
dan.zshrc
.sumber