私はpostgresqlを持ち、10個のレコードを持つテーブルを持っているので、シェルスクリプトの10個のレコードに対して10個のローカル変数が必要です。
次の方法を試しましたが、list123[1]...list123[9]の代わりにlist123[0]変数にすべてのレコードを保存します。
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、名前、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個のシェル変数を使用しますか?
後者には奇妙なトリックが必要です。
#!/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」...という名前のシェル変数を設定しますが、「list123」という配列シェル変数の他の要素は設定しません。