Ho scritto una domanda:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
sql locale: una stringa molto lunga. La query non è formattata. Come posso dividere una stringa in più righe?
=con spazi.
Ho scritto una domanda:
function print_ui_hosts
{
local sql = "select ........."
print_sql "$ sql"
}
sql locale: una stringa molto lunga. La query non è formattata. Come posso dividere una stringa in più righe?
=con spazi.
Risposte:
Utilizzare readcon un heredoc come mostrato di seguito:
read -d '' sql << EOF
select c1, c2 from foo
where c1='something'
EOF
echo "$sql"
readavrà un codice di uscita di 1 in questa situazione; se questo è importante ( set -ead esempio, stai correndo con ), ti consigliamo di aggiungere un || truealla fine della prima riga.
set -eesce dalla shell se un comando ha uno stato di uscita "imprevisto" diverso da zero. Con "imprevisto", intendo che viene eseguito in un contesto in cui non stai osservando specificamente il suo stato di uscita. falseda solo, ad esempio, uscirebbe dalla shell. false || trueno, dal momento che stai anticipando lo stato di uscita diverso da zero specificando un altro comando da eseguire se il primo fallisce.
-d ' 'fa qui?
readnon interrompere la lettura quando si incontra una nuova riga.
è sufficiente inserire una nuova riga dove necessario
sql="
SELECT c1, c2
from Table1, Table2
where ...
"
shell cercherà le virgolette di chiusura
sql="SELECT c2, c2
Vorrei dare un'ulteriore risposta, mentre le altre saranno sufficienti nella maggior parte dei casi.
Volevo scrivere una stringa su più righe, ma il suo contenuto doveva essere una riga singola.
sql=" \
SELECT c1, c2 \
from Table1, ${TABLE2} \
where ... \
"
Mi dispiace se questo è un po 'fuori tema (non ne avevo bisogno per SQL). Tuttavia, questo post compare tra i primi risultati quando si cercano variabili di shell multilinea e una risposta aggiuntiva sembrava appropriata.
echo "$sql"invece di echo $sql.
Grazie alla risposta di dimo414 a una domanda simile , questo mostra come funziona la sua ottima soluzione e mostra che puoi anche avere citazioni e variabili nel testo facilmente:
$ ./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
readnon esporta la variabile (che è una buona cosa la maggior parte delle volte). Ecco un'alternativa che può essere esportata in un comando, può preservare o scartare gli avanzamenti di riga e consente di mescolare gli stili di citazione secondo necessità. Funziona per bash e zsh.
oneLine=$(printf %s \
a \
" b " \
$'\tc\t' \
'd ' \
)
multiLine=$(printf '%s\n' \
a \
" b " \
$'\tc\t' \
'd ' \
)
Ammetto che la necessità di citazioni lo renda brutto per SQL, ma risponde alla domanda (più generalmente espressa) nel titolo.
Lo uso in questo modo
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')
in un file proveniente da my .bashrce .zshrc.
shellsi parla bene qui? Dovrestibatchesserebasho sei davvero dal lato oscuro?