如何在shell脚本中获取psql表记录?

如何在shell脚本中获取psql表记录?

我有 postgresql,因为我有一个包含 10 条记录的表,我想要 10 个局部变量 shell 脚本中的 10 条记录。

我尝试使用以下方法,但它将存储 list123[0] 变量中的所有记录,而不是 list123[1]...list123[9] 上。

declare -a list123
list123=( "$(psql -t -h 10.100.0.1 -U prasad statistics -c "select command from jobhandler.config_info where conf_name like '%stager%'")" )

我想要相应的 list123[0-9] 中的每条记录。

答案1

该问题是由您在命令替换周围放置的双引号引起的$()。这会将整个输出转换为单个多行字符串。

尝试:

declare -a list123
list123=( $(psql -t -h 10.100.0.1 -U prasad statistics -c "select command from jobhandler.config_info where conf_name like '%stager%'") )

我没有你的表,但我在我的系统上使用简单的 id、name、dob 表进行了测试:

$ list123=($(psql -t -c 'select dob from newtable'))
$ set | grep list123
list123=([0]="1967-03-07" [1]="1964-08-07" [2]="1992-10-19" [3]="1964-12-18" [4]="1945-12-26")

答案2

我不确定我是否在回答你的问题。您想要一个包含 10 个字符串的数组作为局部变量,还是需要 10 个 shell 变量,每个变量包含一个字符串?

后者需要一个奇怪的技巧:

#!/bin/bash

COUNTER=1
eval $(psql -t -h 10.100.0.1 -U prasad statistics -c "select command from jobhandler.config_info where conf_name like '%stager%'" |
while read VAR
do
    echo "list123$COUNTER='$VAR'"
    ((COUNTER = COUNTER + 1))
done)

echo list1231="$list1231"
echo list1232="$list1232"

此变体最终设置名为“list1231”、“list1232”、“list1233”的 shell 变量...,它不会设置名为“list123”的数组 shell 变量的不同元素

相关内容