Como armazenar vários resultados de consulta na variável de script de shell (Array)?

Como armazenar vários resultados de consulta na variável de script de shell (Array)?

Estou tentando fazer uma consulta e armazenarcada linharesulta em um elemento de array em ksh (talvez bash). Eu faço:

result=($($PATH_UTI/querysh "
set heading off
set feedback off
SELECT columnA,columnb FROM user.comunication;"))

Eu tenho isso:

row1 = HOUSE CAR
row2 = DOC   CAT
echo "${result[1]}" and it gives me HOUSE

Mas eu gostaria de obter:

echo "${result[1]}" gives: "HOUSE CAR"

Responder1

Você precisa alterar o separador padrão IFSpara dividir os dados por caractere de fim de linha e desativar o globbing para set -fevitar problemas com strings contendo, por exemplo, *ou ?:

$ IFS=$'\n'
$ set -f
$ result=( $(printf "HOUSE CAR\nDOC   CAT") )
$ echo "${result[0]}"
HOUSE CAR
$ echo "${result[1]}"
DOC   CAT

Observe que ambas as alterações permanecerão em vigor pelo restante do script, a menos que sejam alteradas novamente.

Responder2

No Bash você pode usar mapfile(deve ser testado com seu resultado real):

# note that the parenthesis are not needed
$ result="HOUSE CAR
DOC   CAT"
$ mapfile -t arr < <(printf "%s" "$result")
$ echo "${arr[0]}" # or 1 if the first row is empty
HOUSE CAR

informação relacionada