Как сохранить множественные результаты запроса в переменной скрипта оболочки (массиве)?

Как сохранить множественные результаты запроса в переменной скрипта оболочки (массиве)?

Я пытаюсь сделать запрос и сохранитькаждый рядрезультат в элементе массива в ksh (возможно bash). Я делаю:

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

У меня есть это:

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

Но я хотел бы получить:

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

решение1

Вам необходимо изменить разделитель по умолчанию, IFSчтобы разделить данные по символу конца строки, и отключить подстановку, чтобы set -fизбежать проблем со строками, содержащими, например, *или ?:

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

Обратите внимание, что оба изменения останутся в силе до конца скрипта, если только вы не вернете их обратно.

решение2

В Bash вы можете использовать mapfile(это следует проверить с вашим реальным результатом):

# 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

Связанный контент