Observe que readterá um código de saída 1 nessa situação; se isso importa (você está executando set -e, por exemplo), adicione um || trueno final da primeira linha.
chepner
4
set -esai do shell se um comando tiver um status de saída diferente de zero "não antecipado". Por "imprevisto", quero dizer que é executado em um contexto em que você não está olhando especificamente para o status de saída. falsepor si só, por exemplo, sairia do shell. false || truenão, pois você está antecipando o status de saída diferente de zero, especificando outro comando para executar se o primeiro falhar.
não é uma boa solução se a consulta sql contiver aspas duplas. Você terá que escapar deles e ficará confuso.
precisa
13
As aspas duplas do @dogbane aparecem raramente na maioria dos dialetos SQL; portanto, na prática, isso é limpo.
Iain Samuel McLean Elder
4
Em seguida, enrole a string entre aspas simples.
Tripleee
Não sabe por que deseja ou precisa da quebra de linha principal. Para o meu pedido eu não fiz, então eu apenas comecei comsql="SELECT c2, c2
bhfailor
1
Engraçado que parece fácil demais para ser verdade. FYI, para adicionar DQ, basta criar um DQ variável = '\ "' e, em seguida, fazer referência a ela na demonstração com $ {DQ}.
Timothy C. Quinn
69
Eu gostaria de dar uma resposta adicional, enquanto as outras serão suficientes na maioria dos casos.
Eu queria escrever uma string em várias linhas, mas seu conteúdo precisava ser de linha única.
sql=" \
SELECT c1, c2 \
from Table1, ${TABLE2} \
where ... \
"
Sinto muito se isso estiver um pouco fora do tópico (eu não precisava disso para SQL). No entanto, este post aparece entre os primeiros resultados ao pesquisar variáveis de shell de várias linhas e uma resposta adicional parecia apropriada.
$ ./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
readnão exporta a variável (o que é bom na maioria das vezes). Aqui está uma alternativa que pode ser exportada em um comando, pode preservar ou descartar alimentações de linha e permite misturar estilos de aspas, conforme necessário. Funciona para o bash e o zsh.
oneLine=$(printf %s \
a \
" b " \
$'\tc\t' \
'd ' \
)
multiLine=$(printf '%s\n' \
a \
" b " \
$'\tc\t' \
'd ' \
)
Admito que a necessidade de citar torna isso feio para o SQL, mas responde à pergunta (mais geralmente expressa) no título.
shell
estão falando bem aqui? Deveriabatch
serbash
ou você é realmente do lado sombrio?=
espaços.Respostas:
Usar
read
com um heredoc, como mostrado abaixo:fonte
read
terá um código de saída 1 nessa situação; se isso importa (você está executandoset -e
, por exemplo), adicione um|| true
no final da primeira linha.set -e
sai do shell se um comando tiver um status de saída diferente de zero "não antecipado". Por "imprevisto", quero dizer que é executado em um contexto em que você não está olhando especificamente para o status de saída.false
por si só, por exemplo, sairia do shell.false || true
não, pois você está antecipando o status de saída diferente de zero, especificando outro comando para executar se o primeiro falhar.-d ' '
faz aqui?read
para não parar de ler ao encontrar uma nova linha.basta inserir uma nova linha sempre que necessário
shell estará procurando as aspas finais
fonte
sql="SELECT c2, c2
Eu gostaria de dar uma resposta adicional, enquanto as outras serão suficientes na maioria dos casos.
Eu queria escrever uma string em várias linhas, mas seu conteúdo precisava ser de linha única.
Sinto muito se isso estiver um pouco fora do tópico (eu não precisava disso para SQL). No entanto, este post aparece entre os primeiros resultados ao pesquisar variáveis de shell de várias linhas e uma resposta adicional parecia apropriada.
fonte
echo "$sql"
vez deecho $sql
.Graças à resposta de dimo414 a uma pergunta semelhante , isso mostra como sua ótima solução funciona e mostra que você também pode ter aspas e variáveis no texto:
saída de exemplo
test.sh
fonte
read
não exporta a variável (o que é bom na maioria das vezes). Aqui está uma alternativa que pode ser exportada em um comando, pode preservar ou descartar alimentações de linha e permite misturar estilos de aspas, conforme necessário. Funciona para o bash e o zsh.Admito que a necessidade de citar torna isso feio para o SQL, mas responde à pergunta (mais geralmente expressa) no título.
Eu uso assim
em um arquivo originado tanto do meu
.bashrc
como do.zshrc
.fonte