複数のクエリ結果をシェルスクリプト変数(配列)に保存するには?

複数のクエリ結果をシェルスクリプト変数(配列)に保存するには?

クエリして保存しようとしています。各ライン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つの変更は、再度変更しない限り、スクリプトの残りの部分に適用されます。

答え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

関連情報