Wie speichere ich mehrere Abfrageergebnisse in einer Shell-Skriptvariable (Array)?

Wie speichere ich mehrere Abfrageergebnisse in einer Shell-Skriptvariable (Array)?

Ich versuche eine Abfrage durchzuführen und zu speichernjede Reiheergibt ein Array-Element in KSH (vielleicht Bash). Ich mache:

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

Ich habe das:

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

Aber ich hätte gerne:

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

Antwort1

Sie müssen das Standardtrennzeichen ändern, IFSum die Daten nach dem Zeilenendezeichen zu trennen, und das Globbing deaktivieren, um set -fProbleme mit Zeichenfolgen zu vermeiden, die beispielsweise *oder enthalten ?:

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

Beachten Sie, dass beide Änderungen für den Rest des Skripts wirksam bleiben, sofern sie nicht wieder zurückgesetzt werden.

Antwort2

In Bash können Sie Folgendes verwenden mapfile(es sollte mit Ihrem tatsächlichen Ergebnis getestet werden):

# 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

verwandte Informationen