
나는 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"이라는 배열 셸 변수의 다른 요소는 설정하지 않습니다.