ksh에서 SQL 쿼리의 출력을 추가할 때 출력이 손상됨

ksh에서 SQL 쿼리의 출력을 추가할 때 출력이 손상됨

저는 스크립팅을 처음 접했습니다. 아래에 제공된 SQL 함수의 출력을 다른 변수에 추가하고 싶습니다. 예를 들면 다음과 같습니다.

month_end ()
{
mdate=$($SQLPLUS_HOME/sqlplus.exe -S $DBC  << END
set pagesize 0 feedback off verify off heading off echo off;
select to_char(last_day(add_months(sysdate,-1)),'yyyymmdd') from dual;
exit;
END
)
}

$mdate의 출력을 에코하면 완벽합니다. (20160531)

하지만 다른 변수에 추가하면 전체 값이 손상됩니다(Hello_20160531_WORLD.txt 대신 _WORLD.txt).

FILENAME=Hello
EXTENSION=WORLD.txt
NAME=$FILENAME_${mdate}_${EXTENSION}

echo ${NAME}

답변1

밑줄은 _변수 이름의 유효한 부분이므로 중괄호도 필요하기 때문 입니다 FILENAME.

NAME=${FILENAME}_${mdate}_${EXTENSION}

귀하의 다른 응답에 따르면 쉘 스크립트를 실행하거나 sqlplus를 실행하여 \rFILENAME 할당 줄이나 sqlplus 출력에 캐리지 리턴( )이 있는 것으로 보입니다 .$mdatecat -vecho $mdate | cat -vexe, 캐리지 리턴이 추가될 수 있는 Cygwin과 유사한 환경에서 실행 중이라고 가정합니다. mdate=${mdate//^M/}^M이 입력된 곳에 control-v, control-m을 추가하여 이 문제를 해결하세요.

관련 정보