¿Cómo almacenar múltiples resultados de una consulta en una variable de script de shell (matriz)?

¿Cómo almacenar múltiples resultados de una consulta en una variable de script de shell (matriz)?

Estoy intentando hacer una consulta y almacenar.cada filada como resultado un elemento de matriz en ksh (tal vez bash). Sí:

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

Yo tengo eso:

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

Pero me gustaría conseguir:

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

Respuesta1

Debe cambiar el separador predeterminado IFSpara dividir los datos por carácter de final de línea y deshabilitar el globbing para set -fevitar problemas con cadenas que contienen, por ejemplo, *o ?:

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

Tenga en cuenta que ambos cambios permanecerán vigentes durante el resto del script a menos que se vuelvan a modificar.

Respuesta2

En Bash puedes usar mapfile(debe probarse con tu 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

información relacionada