Isso parece um Problema XY - você diz que quer adicionar um intervalo entre cada duas palavras, mas o que você realmente quer fazer é bonito imprimir os dados retornados por uma consulta SQL.
Seu problema é causado pelo fato de que sua função executeSQLQuery (ou script ou programa) retorna saída formatada em vez de apenas os dados .... e parece que está fazendo isso porque sua cadeia $ QUERY está informando.
Você pode obter executeSQLQuery
ou uma função / script relacionado para retornar apenas os dados em um formato facilmente analisado (como CSV ou delimitado por tabulação), sem cabeçalhos de coluna?
(em outras palavras, "Don't Do That, Then". Separe a apresentação dos resultados da coleta de dados)
Se isso for possível, você poderá usar printf para formatar os dados da maneira que quiser. por exemplo. usando saída delimitada por tabulações e uma matriz bash:
QUERY="SELECT FullName, Phone, Email FROM Table1 WHERE EmpID=001;"
# disable globbing which would otherwise be performed upon non-quoted
# command substitution (except in zsh):
set -f
# set the input-field-separator to tab and newline (but not space characters)
# execute the query and store the results in the array $output
IFS=$'\t\n' output=($(executeSQLQuery "$QUERY"))
# now print the output array in the format we want.
printf "Your Name: %s\nYour Phone: %s\nEmail: %s\n" "${output[@]}"
Aqui está um exemplo de trabalho usando o mysql. Eu não sei qual é o seu executeSQLQuery
, mas acabei de fazer um banco de dados de teste mysql (chamado 'junk'), preenchai com seus dados de exemplo e defini executeSQLQuery
como uma função assim:
$ executeSQLQuery() { mysql --batch --silent junk -e "$@" ;}
Observe as opções --batch
e --silent
. Eles dizem ao mysql para me fornecer apenas os dados sem cabeçalhos ou outra formatação. Eu não usei as opções -u
e -p
para usuário e senha porque criei um arquivo ~ / .my.cnf com minhas credenciais.
Agora, vamos executar a consulta, mostrar o que a matriz de saída contém e, em seguida, imprimir com printf.
$ set -f; IFS=$'\t\n' output=($(executeSQLQuery 'Select Fullname,Phone, Email from Table1 where EmpId = 001'))
$ set | grep output
output=([0]="Samantha" [1]="111-111-1111" [2]="[email protected]")
$ printf "Your Name: %s\nYour Phone: %s\nEmail: %s\n" "${output[@]}"
Your Name: Samantha
Your Phone: 111-111-1111
Email: [email protected]
BTW, o bash não suporta matrizes multidimensionais, portanto, se sua consulta retornar várias linhas, você teria que escrever algum tipo de loop para imprimir [0..2], [3..5], [ 6..8] e assim por diante, como registros separados. Por exemplo, adicionei um segundo registro à Tabela 1 e alterei a consulta para retornar todas as linhas ... aqui está como a matriz de saída se parece agora:
$ set -f; IFS=$'\t\n' output=($(executeSQLQuery 'Select Fullname,Phone, Email from Table1'))
$ set | grep output
output=([0]="Samantha" [1]="111-111-1111" [2]="[email protected]" [3]="Fred" [4]="222-222-2222" [5]="[email protected]")
No geral, porém, é muito mais fácil fazer o trabalho de banco de dados em Perl com a biblioteca DBI. Se você não está empenhado em trabalhar no bash por algum motivo, eu recomendo começar a aprender perl.