以下には2つの同様のコードがあります。最初のコードは機能しますが、2番目のコードは機能しないのはなぜですか?かっこの後に中かっこを使用する方法を説明できる人はいますか?
$ 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