我有 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 变量的不同元素