如何将查询多个结果存储在shell脚本变量(数组)中?

如何将查询多个结果存储在shell脚本变量(数组)中?

我正在尝试进行查询并存储每行在 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

相关内容