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 IFS
para dividir os dados por caractere de fim de linha e desativar o globbing para set -f
evitar 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