Bir sorgu yazdım:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
yerel sql - çok uzun bir dizge. Sorgu formatlanmamış. Bir dizeyi birden çok satıra nasıl bölebilirim?
=boşluklarla çevrelememelisiniz .
Bir sorgu yazdım:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
yerel sql - çok uzun bir dizge. Sorgu formatlanmamış. Bir dizeyi birden çok satıra nasıl bölebilirim?
=boşluklarla çevrelememelisiniz .
Yanıtlar:
readAşağıda gösterildiği gibi bir yorum ile kullanın :
read -d '' sql << EOF
select c1, c2 from foo
where c1='something'
EOF
echo "$sql"
readBu durumda çıkış kodunun 1 olacağını unutmayın ; bu önemliyse ( set -eörneğin ile koşuyorsanız ), || trueilk satırın sonuna bir eklemek isteyeceksiniz .
set -ebir komut "beklenmeyen" sıfırdan farklı bir çıkış durumuna sahipse kabuktan çıkar. "Öngörülemeyen" derken, özellikle çıkış durumuna bakmadığınız bir bağlamda çalıştığını söylüyorum. falseörneğin kendi başına kabuktan çıkar. false || trueolmaz, çünkü ilk başarısız olursa çalışacak başka bir komut belirterek sıfırdan farklı çıkış durumunu öngörüyorsunuz.
-d ' 'burada ne iş var?
readBir satırsonu ile karşılaştığında okumayı bırakmamayı söylemek .
sadece gerektiğinde yeni bir satır ekleyin
sql="
SELECT c1, c2
from Table1, Table2
where ...
"
kabuk kapanış tırnak işaretini arayacaktır
sql="SELECT c2, c2
Diğer cevaplar çoğu durumda yeterli olurken, bir cevap daha vermek istiyorum.
Birden çok satıra bir dizgi yazmak istedim, ancak içeriğinin tek satır olması gerekiyordu.
sql=" \
SELECT c1, c2 \
from Table1, ${TABLE2} \
where ... \
"
Bu biraz konu dışı ise özür dilerim (SQL için buna ihtiyacım yoktu). Bununla birlikte, bu gönderi, çok satırlı kabuk değişkenleri aranırken ilk sonuçlar arasında ortaya çıkıyor ve ek bir cevap uygun görünüyordu.
echo "$sql"bunun yerine deneyin echo $sql.
Sayesinde benzer bir soruya dimo414 cevabı , kolayca yanı metinde tırnak ve değişkenleri sahip olabileceği bu onun harika bir çözüm nasıl çalıştığını gösterir ve gösteriler:
$ ./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
#!/bin/bash
function 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
readdeğişkeni dışa aktarmaz (bu çoğu zaman iyi bir şeydir). İşte tek bir komutla dışa aktarılabilen, satır beslemelerini koruyabilen veya atabilen ve gerektiğinde alıntı stillerinin karıştırılmasına izin veren bir alternatif. Bash ve zsh için çalışıyor.
oneLine=$(printf %s \
a \
" b " \
$'\tc\t' \
'd ' \
)
multiLine=$(printf '%s\n' \
a \
" b " \
$'\tc\t' \
'd ' \
)
Alıntı yapma ihtiyacının SQL için bunu çirkinleştirdiğini kabul ediyorum, ancak başlıktaki (daha genel olarak ifade edilen) soruyu yanıtlıyor.
Bunu böyle kullanıyorum
export LS_COLORS=$(printf %s \
':*rc=36:*.ini=36:*.inf=36:*.cfg=36:*~=33:*.bak=33:*$=33' \
...
':bd=40;33;1:cd=40;33;1:or=1;31:mi=31:ex=00')
Bir dosyada hem benim kaynaklı .bashrcve .zshrc.
shellBurada ne konuşuyor? Melibatcholmakbashveya darkside gelen gerçekten?