왜 하나의 bteq 스크립트는 작동하고 다른 스크립트는 작동하지 않습니까?

왜 하나의 bteq 스크립트는 작동하고 다른 스크립트는 작동하지 않습니까?

아래에는 두 개의 유사한 코드가 있습니다. 첫 번째 코드는 작동하지만 두 번째 코드는 작동하지 않는 이유는 무엇입니까? 괄호 뒤에 중괄호를 사용하는 방법을 설명할 수 있는 사람이 있나요?

$ vi varoutput.bt
query_td () {
bteq << EOBTQ |grep '^>' |sed -e "s/^>//"
.LOGON TDPROD/userid,pass;
select top 3  '>'||t.cal_dt from rldmprod_v.cal_dt t where t.cal_dt =    current_date;
.LOGOFF;
.QUIT;
EOBTQ
}
var=$(query_td)
echo $var

$ ksh varoutput.bt
2017/05/14

$ vi testoutput4.bt
testabcd=$(bteq <<EOF |grep '^>' |sed -e "s/^>//"
.LOGON TDPROD/userid,pass;

select top 3  '>'||t.cal_dt from rldmprod_v.cal_dt t where t.cal_dt =   current_date;

.LOGOFF;
.QUIT;
EOF)
var=$testabcd
echo $var

$ ksh testoutput4.bt
 *** Failure 5628 Column > not found in rldmprod_v.t.
            Statement# 1, Info =0

답변1

인라인 블록 끝에 있는 종결자( EOF귀하의 경우)는 해당 줄의 유일한 문자열이어야 합니다. 스크립트는 다음과 같이 다시 작성되어야 합니다.

testabcd=$(bteq <<EOF |grep '^>' |sed -e "s/^>//"
.LOGON TDPROD/userid,pass;

select top 3  '>'||t.cal_dt from rldmprod_v.cal_dt t where t.cal_dt =   current_date;

.LOGOFF;
.QUIT;
EOF
)
var=$testabcd
echo $var

관련 정보